【发布时间】:2016-01-02 12:41:18
【问题描述】:
我有两张桌子。第一个充满了书籍,每本书都有一个book_id。第二个表是book_id 到keyword_id 的关系表。
SELECT b.* FROM books_table b
INNER JOIN keywords_table k
ON b.book_id = k.book_id AND k.keyword_id NOT IN(1,2,3)
WHERE b.is_hardcover = 1
GROUP BY b.book_id
期望的结果
keyword_id 为 1、2 或 3 的书籍均未附加到任何书籍。
实际结果
书籍可以有关键字 1、2 或 3,只要它们附加了排除列表中不的附加关键字 ID。
我试过的
上面的查询是我最接近实现它的方法,但在这方面它失败了。
我怎样才能以最优化的方式达到预期的结果?
【问题讨论】:
-
希望得到“没有...的书”的结果会让自己和他人感到困惑。
-
请注意,选择除分组列和组的聚合函数之外的列不是有效的 SQL。它对你有用,因为 MySQL 支持它作为扩展。如果 MySQL 是您唯一关心的环境,那很好,但您应该在知情的情况下做出该决定,而不是默认。