加入多个条件的语句

时间:2018-02-28 03:24:02

标签: mysql database

好的我有两个mysql表,一个叫books,另一个是reading_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;

事情就是在我的程序中并不是所有书籍中的书都在阅读 - 跟踪,用户必须再做一步,所以我不想要在两张桌子上都相似的书籍,我想要所有书籍中的书籍reading_status = 1;但是想要所有来自reading_tracking的书籍。

3 个答案:

答案 0 :(得分:1)

您的语法应该有SELECT [x] FROM后跟INNER JOIN,然后您需要ON来表示哪个字段在两个表之间是同义词。在您的示例中,我假设您在book_id中有一列books,在book_num中有一列reading_tracking

WHERE clause 应该在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行的任何行。

答案 1 :(得分:0)

我假设列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;

答案 2 :(得分:0)

您可以在执行JOIN之前使用子查询,如下所示:

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

请参阅Using MySQL Alias To Make The Queries More Readable