所以我有两张桌子。我试图加入两个表格,只返回表格中没有匹配的表格中的记录。到目前为止,我很难过。
--------------------
name amount date
--------------------
bob 250 4/8/2010
dan 100 4/8/2010
sla 222 4/8/2010
obo 344 4/8/2010
bob 100 4/8/2010
--------------------
name amount date
--------------------
bob 250 4/8/2010
dan 100 4/8/2010
sla 500 4/8/2010
obo 300 4/8/2010
bob 100 4/8/2010
答案 0 :(得分:2)
您可以使用EXISTS
:
SELECT *
FROM a
WHERE NOT EXISTS (SELECT *
FROM b
WHERE name = a.name
AND amount = a.amount
AND date = a.date)
答案 1 :(得分:1)
在SQL中执行此操作的一种规范方法是使用outer join:
select a.*
from a left outer join b
on (
a."name" = b."name"
and a."amount" = b."amount"
and a."date" = b."date"
) where b."name" is null
and b."amount" is null
and b."date" is null
左外连接返回连接左侧表中的所有行,无论它们是否与连接右侧表中的行匹配。但是,当左表中的行在右表中没有匹配时,右表的列将设置为null
。因此,您可以过滤掉所做的匹配的所有行,并仅返回没有&匹配的左表中的行。