【发布时间】:2020-10-30 02:55:08
【问题描述】:
我会尝试用一个例子来解释。
我有 2 张桌子:
table1
column1 column2 column3
000001 ABC COD1
000001 ABC COD2
000002 BCD COD3
000003 EDF COD1
000003 EDF COD3
000004 FGH COD1
000004 FGH COD2
000004 FGH COD3
000004 FGH COD4
table2
column3
COD1
COD2
COD3
COD4
COD5
COD6
COD7
table2 仅包含 table1 的 column3 的所有可能代码(仅此而已)。 table1 包含我的真实数据。 我不要 table2 COD5 COD6 和 COD7
我必须得到这样的结果
000001 ABC COD1
000001 ABC COD2
null null COD3
null null COD4
null null COD1
null null COD2
000002 BCD COD3
null null COD4
000003 EDF COD1
null null COD2
000003 EDF COD3
null null COD4
000004 FGH COD1
000004 FGH COD2
000004 FGH COD3
000004 FGH COD4
我需要使用 oracle SQL 来执行此操作,但我不确定是否可行。如有必要,我可以接受第一列始终是我当前的 column1(即使 column2 为空)。我不想重复,例如两个 000004 FGH COD4 但如果为空,我想重复。
我尝试了我所知道的一切......但我能做的最好的事情是在我需要指定 column1 条件的子查询上使用减号或右连接进行联合。
编辑这是一个朋友在我尝试时找到的正确答案
select * from
(select distinct a.col1, a.col2
from table1 a
right join (select col3 from table2 f
where f.col3 IN ('COD1','COD3','COD6')) b
on a.col3 = b.col3),
(select col3 from table2 f
where f.col3 IN ('COD1','COD3','COD6'));
【问题讨论】:
标签: sql oracle join left-join union