是否可以制作单个SQL查询来解决此问题?有4个表:
book
表与page
表具有一对多的关系。
单个page
可能包含syntax_error
或lexical_error
(对于此示例,一个页面不可能同时出错,每页只有一个错误)所以{{1与page
或syntax_error
具有一对一的关系。
如何找到没有错误的所有图书? (如何获取没有任何错误或任何非固定错误的页面的所有lexical_error
值?)
使用一个SQL查询。
答案 0 :(得分:2)
您可以使用NOT EXISTS
SELECT id, title, ...
FROM book AS b
WHERE NOT EXISTS (SELECT 1
FROM page AS p
JOIN syntax_error AS se ON p.id = se.page_id
WHERE p.book_id = b.id)
AND
NOT EXISTS (SELECT 1
FROM page AS p
JOIN lexical_error AS le ON p.id = le.page_id
WHERE p.book_id = b.id)
答案 1 :(得分:1)
使用not in()
(删除之前的联合not in()
,因为它可能无法利用索引)
select b.id
from book b
where b.id not in (
select p.book_id
from page p
inner join syntax_error se
on p.id = se.page_id
and se.fixed = 0
)
and b.id not in (
select p.book_id
from page p
inner join lexical_error le
on p.id = le.page_id
and le.fixed = 0
)
答案 2 :(得分:0)
select b.id
from book b
left outer join page p on p.book_id = b.id
left outer join syntax_error s on s.page_id = p.id
left outer join lexical_error l on l.page_id = p.id
group by b.id
having sum(case s.fixed when 0 then 1 else 0 end) = 0
and sum(case l.fixed when 0 then 1 else 0 end) = 0