簡體   English   中英

根據列值,查詢不同的表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM