我正在构建一个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
以上并没有返回我期待的结果。 这可以纠正吗?
答案 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