不确定我是否被“即时愚蠢”所困扰,或者这个查询是否真的很棘手。
所以我有两张桌子。
table A (aid,b,c) - aid unique
table B (aid, country) - aid not unique
(eg: (aid-country) = 2-ITALY, 2-JAPAN etc.)
我正在尝试使用连接来查找A 中不存在于 B 中的所有辅助工具,或者查找 A 中 B 中的任何辅助工具,但该辅助工具没有匹配的国家 ITALY
一个简单的子查询可以是:
select * from A where aid is not in (select aid from B where country = 'ITALY')
select * from A where not exists (select aid from B where country = 'ITALY')
在上面的例子中,如果表A有aid=1,2,3,4
并且表B只有两条记录(2-ITALY, 2-JAPAN)
,我应该只得到1,3,4
结果。但如果这两条记录是(2-USA, 2-JAPAN)
,结果就会是1,2,3,4
。
以下左联接将不起作用。
select *
from A left join B on A.aid=B.aid
where b.country<>ITALY AND B.aid is null
select *
from A left join B on A.aid=B.aid
where ( B.aid is null) .
OR (where A.aid=B.aid and b.country<>ITALY)
因为如果 B 中的记录是 ,这仍然会2-JAPAN
被视为匹配 (2-ITALY , 2-JAPAN)
。
如果我要替换子查询,等效连接是什么?