从一个表中返回与其他表不匹配的单行

时间:2014-05-18 00:48:55

标签: mysql sql join

所以我有两张桌子。我试图加入两个表格,只返回表格中没有匹配的表格中的记录。到目前为止,我很难过。

表A

--------------------
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

表B

--------------------
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

2 个答案:

答案 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。因此,您可以过滤掉所做的匹配的所有行,并仅返回没有&匹配的左表中的行。