好的我有两个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的书籍。
答案 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;