SQL antijoin with multiple keys

SQL antijoin with multiple keys

我想在两个 table 上实现反连接,但使用两个键,以便结果是 Table A 中不包含 [[=22= 组合的所有行], key_2] 在 Table 中找到 B. 如何在 SQL 中编写此查询?

如果要反left join,逻辑是:

select a.*
from tablea a 
left join tableb b on b.key_1 = a.key_1 and b.key_2 = a.key_2
where b.key_1 is null

对于我来说,我喜欢用not exists来实现这样的逻辑,因为我发现它更能表达意图:

select a.*
from tablea a
where not exists (
    select 1 from tableb b where b.key_1 = a.key_1 and b.key_2 = a.key_2
)

not exists 查询将利用 tableb(key_1, key_2) 上的索引。

select a.*
from table_a a 
left anti join table_b b on a.key_1 = b.key_1 and a.key_2 = b.key_2;