首页 > 解决方案 > 基于另一个表中的值从一个表的行进行完全外连接

问题描述

我有这两张桌子:

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. 在 table 中VALID,columnID是主键(每个唯一 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 中工作。谢谢你。

标签: mysqloracleteradata

解决方案


我几乎明白了,但不知道从性能角度来看这是否是最佳解决方案: 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)


推荐阅读