基于另一个表的值从一个表的行进行完全外部联接

gab6jxml  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(233)

我有两张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中工作。谢谢您。

kqlmhetl

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)

相关问题