根据一个公共列的值从3个表中查询数据

时间:2020-06-30 14:18:19

标签: sql oracle

我有3个格式的表

  • T1:T1_ID,参考...
  • T2:T2_ID,参考...
  • T3:T3_ID,参考,...

我想将输出打印为由3列T1_ID,T2_ID和一个T3_ID组成的表,该表基于所有三个表共有的“参考”列的值来显示ID。

2 个答案:

答案 0 :(得分:0)

这是您想要的吗?

select reference as t1_id, null as t2_id, null as t3_id
from t1
union all
select null as t1_id, reference as t2_id, null as t3_id
from t2
union all
select null as t1_id, null as t2_id, reference as t3_id
from t3;

这似乎不是特别有用。但这就是我正在阅读的问题。

还是您想要full join

select t1.t1_id, t2.t2_id, t3.t3_id
from t1 full join
     t2
     using (reference) full join
     t3
     using (reference)

答案 1 :(得分:0)

由于您没有提供太多有关如何联接三个表的信息,所以我想您需要一个INNER JOIN,因此将仅显示符合联接条件的记录。

SQL> SELECT t1.t1_id, t2.t2_id, t3.t3_id
     FROM t1 
     inner  join t2 on ( nvl(t1.reference,'XX') = nvl(t2.reference,'XX') )
     inner  join t3 on ( nvl(t1.reference,'XX') = nvl(t3.reference,'XX') )

我正在使用INNER JOIN来获取与三个表中引用相同的条件相匹配的记录。为了避免空值,我不知道这是可能的,因为您什么都没说,我使用NVL来避免这些问题。请记住,“完全连接”或“内部连接”之间的区别。为此,请阅读以下文章:

Inner Join vs Full join