2015-05-15 4 views
-2

Следующая select запрос для поиска ключевое слово «закон» из нескольких таблиц tbl_books, tbl_author и tbl_books_subjectSQL SELECT запрос не работает - не удалось найти ошибку

SELECT * 
FROM tbl_books p, tbl_books_author d, tbl_books_subject m 
WHERE p.title = 'law' 
    OR d.author = 'law' 
    OR m.subject = 'law' 
LIMIT 0,30 

Этот запрос дает ошибку. Пожалуйста, помогите мне с этим.

+9

И какая ошибка? –

+0

Сообщите об ошибке. –

+1

Между таблицами нет никакого соединения, поэтому вы получаете «CROSS JOIN». Ошибка, вероятно, укажет на «пробег» :-) – dnoeth

ответ

-1

Вы можете добиться того, что в одном запросе, но вам необходимо иметь некоторый внешний ключ в других таблицах. Здесь проверьте код ниже.

SELECT b.*, ba.*, bs.* FROM tbl_books as b 
    FULL OUTER JOIN tbl_books_author as ba ON ba.book_id=b.id 
    FULL OUTER JOIN tbl_books_subject as bs ON bs.book_id=b.id 
WHERE b.title LIKE 'law' OR ba.author LIKE 'law' OR bs.subject LIKE 'law' LIMIT 0, 30; 

взгляд на запрос глубоко вы можете видеть, что я использовал tbl_books.id сделать присоединяется, которые должны быть включены в другие таблицы, чтобы определить, что отдельные записи.

Надеюсь, это вам помогло.

+0

Чтобы получить результат, в котором любой из этих столбцов содержит «закон», вам нужно использовать «ПОЛНЫЕ ВНЕШНИЕ СОБЫТИЯ» вместо – dnoeth

+0

. Хорошо, я его поменяю. спасибо за предложение. –

+0

@dnoeth mysql не поддерживает 'полное внешнее соединение'. и теперь этот «правильный» ответ ужасно нарушен. –

0

Вам нужно три отдельных ВЫБИРАЕТ (и, вероятно, подстановочных):

SELECT * 
FROM tbl_books 
WHERE title LIKE '%law%' 
LIMIT 0,30 

SELECT * 
FROM tbl_books_author 
WHERE title LIKE '%law%' 
LIMIT 0,30 

SELECT * 
FROM tbl_books_subject 
WHERE title LIKE '%law%' 
LIMIT 0,30 

Если вы возвращаете совместимые результаты, которые вы могли бы UNION им:

SELECT 'book ', title 
FROM tbl_books 
WHERE title LIKE '%law%' 

UNION ALL 

SELECT 'author ', author 
FROM tbl_books_author 
WHERE title LIKE '%law%' 

UNION ALL 

SELECT 'subject', subject 
FROM tbl_books_subject 
WHERE title LIKE '%law%' 
LIMIT 0,30 
+0

Использует ли LIMIT 0,30 для всего запроса или только последний выбор здесь? – jarlh

+0

Будет ли проблема, если я использую OR и пишу все вместе, используя ключевое слово LIKE. –

+0

, когда я запускаю свой предыдущий код в верхней части страницы, показывает: «Отображение строк 0 - 29 (всего 1759260 запросов, получено 5,206 сек)». не могли бы вы объяснить, почему он показывает это. –

Смежные вопросы