Присоединиться к заявлению с несколькими условиями

0

Хорошо, у меня есть две таблицы mysql, называемые книгами, а другая - read_tracking.
Я написал запрос соединения ниже:
$query = "SELECT * FROM books inner join reading_tracking on book_num = book_id;
Моя дилемма заключается в том, что я не хочу, чтобы все из книг я хотел получить запрос, который теоретически будет выглядеть примерно так:

"SELECT * FROM books 
where reading_status = 1 inner 
join SELECT * FROM reading_tracking 
on book_num = book_id";

Если я попробую это, как было предложено:

SELECT * FROM books b 
INNER JOIN reading_tracking rt 
ON b.book_id = rt.book_num 
WHERE rt.reading_status = 1;

Дело в моей программе: не все книги в таблице книг находятся в read_tracking, пользователь должен сделать дополнительный шаг, поэтому я не хочу, чтобы книги, похожие на обе таблицы, мне нужны все книги из книг, где read_status = 1; но вы хотите, чтобы все книги читали readtracking.

Теги:
database

3 ответа

0
Лучший ответ

Я полагаю, что column book_num из таблицы books, book_id - из таблицы reading_tracking. Сначала соедините 2 таблицы, затем используйте WHERE для фильтрации условия:

SELECT * FROM books b
INNER JOIN reading_tracking r
    ON b.book_num = r.book_id
WHERE b.reading_status = 1;
1

Ваш синтаксис должен иметь SELECT [x] FROM за которым следует INNER JOIN, а затем вам нужно ON чтобы указать, какое поле является синонимом между двумя таблицами. В вашем примере я предполагаю, что у вас есть столбец book_id в books и столбец book_num в reading_tracking.

Предложение WHERE должно появиться после ON, и дополнительно должно указать, какую из двух таблиц вы хотите найти в столбце.

Это можно увидеть в следующем:

SELECT * FROM books b
INNER JOIN reading_tracking rt
ON b.book_id = rt.book_num 
WHERE rt.reading_status = 1;

Это будет искать books для любой строки, которая имеет reading_status из 1 в таблице reading_tracking.

0

Вы можете использовать подзапрос перед выполнением JOIN, как показано ниже:

SELECT * 
FROM (SELECT * FROM books WHERE reading_status=1) A 
INNER JOIN reading_tracking B on B.book_num=A.book_id;

См. Использование псевдонима MySQL, чтобы сделать запросы более читаемыми

Ещё вопросы

Сообщество Overcoder
Наверх
Меню