我有这两张桌子:
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个表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中运行。 谢谢。
答案 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)