我在选择既不翻译书籍,又没有翻译书籍的书籍时感到烦恼。也没有预定部分。结构看起来像this。 (抱歉,stackoverflow不会让我发布一个声誉低于10的图片)
它使用共享主键class inheritance design pattern。
这是我到目前为止所提出的:
SELECT * FROM ( ( (`hedwig_db`.`refs` JOIN `hedwig_db`.`books` ON `refs`.`ref_id`=`books`.`ref_id` ) LEFT JOIN `hedwig_db`.`authors` ON `refs`.`ref_id` = `authors`.`ref_id` ) LEFT JOIN `hedwig_db`.`editors` ON `books`.`book_id`=`editors`.`book_id` ) WHERE `books`.`book_id` NOT IN (SELECT `books`.`ref_id`, `books`.`book_id`, `book_section`.`book_id`, `book_translated`.`book_id`, `book_series`.`book_id` FROM( ( (`hedwig_db`.`books` JOIN `hedwig_db`.`book_translated` ON `books`.`book_id`=`book_translated`.`book_id` ) JOIN `hedwig_db`.`book_section` ON `books`.`book_id`=`book_section`.`book_id` ) JOIN `hedwig_db`.`book_series` ON `books`.`book_id`=`book_series`.`book_id` ) )
NOT IN查询没有返回任何内容,我不能为我的生活找出如何获得我正在寻找的东西!在此先感谢:)
答案 0 :(得分:0)
我会简化where
子句以使用not exists
:
SELECT *
FROM `hedwig_db`.`refs` r JOIN
`hedwig_db`.`books` b
ON r.ref_id = b.ref_id LEFT JOIN
`hedwig_db`.`authors` a
ON r.ref_id = a.ref_id LEFT JOIN
`hedwig_db`.`editors` e
ON b.book_id = e.book_id
WHERE NOT EXISTS (select 1 from `hedwig_db`.`book_translated` bt where bt.book_id = b.book_id) and
NOT EXISTS (select 1 from `hedwig_db`.`series` bs where bs.book_id = b.book_id) and
NOT EXISTS (select 1 from `hedwig_db`.`book_sections` bs where bs.book_id = b.book_id);
你的not in
条款正在加入这些表格,所以它会找到三本书。你可以改为union all
,但我会坚持三种不同的条件。