SQL Query比较两个表的名称

时间:2016-05-10 23:38:49

标签: mysql sql-server tsql

我正在构建一个SQL查询,它通过[name]列比较两个表A和B,并返回表A中不在表B中的名称

示例

Table A

ID Name Address 
1  A    ABC
2  B    XYZ
3  C    PQR

Table B
ID Name Gender 
1  A    F
2  B    M
3  D    F

我写的查询应返回表A中的第三行,因为它不在表B中,应该排除所有其他行

以下是我构建的查询

Select * from A oa left join B gp ON oa.name!=gp.name

以上并没有返回我期待的结果。 这可以纠正吗?

4 个答案:

答案 0 :(得分:1)

最简单的方法:

select * from A where name not in (select name from B)

更好的方式:

select * from A where not exists (select 1 from B where B.name = A.name)

答案 1 :(得分:1)

“左连接B”表示将所有内容保留在A中,如果条件满足则将记录关联在B中。

在你的情况下,如果你真的想使用左连接,这应该是它应该是什么('=',而不是'!='):

Select * from A oa left join B gp ON oa.name=gp.name where gp.name is null

如果空值不是问题,更好的方法是使用'not exists'表现,或'except'。

答案 2 :(得分:0)

使用excpet运算符将有助于

 select * from TableA
    except
    select * from TableB

答案 3 :(得分:0)

SELECT a.*
FROM A a
LEFT JOIN B b
ON a.name = b.name
WHERE b.name IS NULL