我有两张table:
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查询来连接两个有数百万行的表。有两张table CONTS
以及 VALID
. 在表中 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条答案
按热度按时间kqlmhetl1#
我差点就知道了,但不知道从性能的Angular 来看这是否是最佳解决方案:
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)