如何从3个表中获取不同的记录,这些表应包含1个表中的所有值

时间:2016-05-18 18:28:23

标签: sql sql-server database oracle plsql

我有查询应该从3个表中获取所有匹配的记录。在三个表中不常见的其他记录,它应该结合第一个表中的记录。 EX:

select a.x,a.y,a.z
from table1 a,table2 b,table3 c
where a.x=b.x
and  b.x=c.x;

上面的查询将获取所有3个表中的公共记录。 我需要将记录添加到我的结果集中,这些记录不存在于table2或table3中。<​​/ p>

记录应如下所示:

1 abc acd
2 xyz xzy
3 pqr prq
4 null null -- incase 4 is not present in either table2 or table3

2 个答案:

答案 0 :(得分:0)

您需要使用outer join代替:

select a.x,a.y,a.z
from table1 a
   left join table2 b on a.x=b.x 
   left join table3 c on b.x=c.x;

答案 1 :(得分:0)

你陈述

  

其他记录在三个表中不常见,它应该联合起来   来自第一张表的记录。

然后陈述

  

我需要将记录添加到我的结果集中,这些记录不存在   table2或table3。

对于第一种情况,使用完整的外连接,它将返回所有表中的所有行。对于第二种情况,使用左连接,这将省去与table1不匹配的行。