有一个名为A和B的表。
A和B有一个名为key_ref的唯一列。和key_ref是两个表的主键
我需要在A中找到记录而不是在B中找到记录。因此我写了一个像
这样的查询SELECT a.*,b* from A a,B b WHERE key_ref NOT IN (SELECT key_ref from B)
这个问题是,我没有获得结果的表B的空列。我的结果应该包括A和B的所有列。
如果我写下我的查询,那么我的结果会出错。有什么办法,我可以在连接条件下实现这一点。
SELECT a.* from A a WHERE key_ref NOT IN (SELECT key_ref from B)
请参阅以下示例。
Table A Table B
key ref col1 key ref col2
A aaa A aaa
B bbb B bbb
C ccc C ccc
D ddd
我的答案应该是,
key ref col1 col2
D ddd
答案 0 :(得分:4)
如果我理解你的要求:
您可以使用LEFT OUTER JOIN
操作,这样您就可以获得B中不存在的所有行(WHERE b.key_ref IS NULL
中的条件)
试试这个:
SELECT *
FROM a
LEFT OUTER JOIN b
ON a.key_ref = b.key_ref
WHERE b.key_ref IS NULL
答案 1 :(得分:1)
这是你需要的:
select * from A
except
select * from B
答案 2 :(得分:1)
如果第二个表 tableB 没有与第一个表关联的记录,那么如何显示第二个表 tableB 中的记录在第一个表 tableA 中不存在。
因此,一种方法是将NULL
包含在列ref中。像那样 tableB :
select a.*, null col2
from tableA a
where not exists (select 1 from tableB b where b.key_ref = a.key_ref);