两个表列的SQL查询 - Oracle

时间:2018-05-24 12:37:08

标签: sql oracle

有一个名为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

3 个答案:

答案 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);