基于来自另一个表的值的一个表的行的完全外部联接

时间:2018-05-26 09:41:29

标签: mysql oracle teradata

我有这两张桌子:

CONTS
ID      SRC_ID      VAL
----    ------      ---
1000    100           2
1000    100           4
1000    100           8

1000    101           2
1000    101           0
1000    101           8

1000    102           2
1000    102           4
1000    102           8

1000    103           3
1000    103           5
1000    103           8

1001    110          12
1001    110           5

1001    111          12

and VALID:
ID      SRC_ID  VALID_ID
----    ------  --------
1000    101          102
1001    110          111

我需要一个SQL查询,它连接2个包含数百万行的表。有2个表CONTSVALID。在表VALID中,列ID是主键(每个唯一ID只有一行)。

我需要得到这个结果:

ID    SRC_ID1  VAL1  SRC_ID2  VAL2
----  -------  ----  -------  ----
1000      101     2      102     2
1000     NULL  NULL      102     4
1000      101     0     NULL  NULL
1000      101     8      102     8

1001      110    12      111    12
1001      110     5     NULL  NULL

SQL应该在Teradata或Oracle中运行。 谢谢。

1 个答案:

答案 0 :(得分:0)

我几乎得到了它,但从性能的角度来看,不知道这是否是最佳解决方案: SELECT COALESCE(T1.ID, T2.ID) AS ID, T1.SRC_ID, T1.VAL, T2.SRC_ID AS SRC_ID, T2.VAL FROM ( SELECT v.ID, v.SRC_ID, c1.VAL FROM VALID v LEFT JOIN CONTS c1 ON (c1.ID = v.ID and c1.SRC_ID = v.SRC_ID) ) T1 FULL OUTER JOIN ( SELECT v.ID, v.VALID_ID AS SRC_ID, c1.VAL FROM VALID v LEFT JOIN CONTS c1 ON (c1.ID = v.ID and c1.SRC_ID = v.VALID_ID) ) T2 ON (T2.ID = T1.ID and T2.VAL = T1.VAL)