![](/img/trans.png)
[英]Depending on the value of a column in a table Get data from two different tables
[英]Depending on column value, query different tables
我有表 A,其中每個 IDENTIFIER 值都是唯一的。 根據它的 CC 還是 DC,我需要將它與不同的表連接,例如,如果它的“CC_”我需要 map 到表 B,如果它的“DC_”我需要 map 它到表 Z0D61F8370CAD1D412F70B841。
表A:
ID | IDENTIFIER
1 | CC_1234567
2 | DC_9494949
表 B:
ID| SOURCE. |INSTRUMENT
7 | 1234567. | 545454
表 C:
ID | SOURCE | INSTRUMENT
8 |. 9494949 |. 63636363
我希望結果如下所示:
IDENTIFIER | INSTRUMENT
CC_1234567 | 545454
DC_9494949 | 63636363
首先,我如何才能從“CC_1234567”中獲取“1234567”,其次在編寫連接查詢時,我會在最終結果表中獲取其他列,例如 B.INSTRUMENT、C.INSTRUMENT。 表 A 中的每個 IDENTIFIER 僅映射到表 B 或表 C。
Select A.IDENTIFIER, B.INSTRUMENT, C.INSTRUMENT
from table.A
inner join table.A on A.IDENTIFIER=B.INSTRUMENT AND A.IDENTIFIER=C.INSTRUMENT
您可以left join
兩次,然后在select
子句中使用coalesce()
:
select a.identifier, coalesce(b.instrument, c.instrument) instrument
from tablea
left join tableb b on a.identifier = concat('CC_', b.source)
left join tablec c on a.identifier = concat('DC_', c.source)
如果兩個表中都有匹配項,則上述查詢優先考慮tableb
。
如果要排除任一表中不匹配的行,則可以添加以下where
子句:
where a.source is not null or b.source is not null
您可以像下面這樣使用 UNION:
SELECT
A.IDENTIFIER,
B.INSTRUMENT
FROM
A
INNER JOIN B
ON B.SOURCE = SUBSTR(A.IDENTIFIER, 4)
WHERE A.IDENTIFIER LIKE 'CC_'
UNION
SELECT
A.IDENTIFIER,
C.INSTRUMENT
FROM
A
INNER JOIN C
ON C.SOURCE = SUBSTR(A.IDENTIFIER, 4)
WHERE A.IDENTIFIER LIKE 'DC_' ;
根據“CC_”或“DC_”,您可以加入不同的表並使用 UNION 進行合並。
試試這個:正確的 function 結合長度應該給你一個方便的方法來去除這些。
SELECT
a.identifier,
coalesce(b.instrument, c.instrument) AS instrument
FROM
a LEFT JOIN b ON
right(a.identifier,length(a.identifier)-3) = b.source
LEFT JOIN c ON
right(a.identifier,length(a.identifier)-3) = c.source;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.