根据列值,查询不同的表

cczfrluj  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(405)

我有一个表,其中每个标识符值都是唯一的。根据它的cc还是dc,我需要用不同的表连接它,例如,如果它的“cc”我需要将它Map到表b,如果它的“dc”我需要将它Map到表c。
表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\u 1234567”中获取“1234567”;其次,在编写连接查询时,我将获取最终结果表中的其他列,例如b.instrument、c.instrument。表a中的每个标识符只Map到表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
ycggw6v2

ycggw6v21#

你可以 left join 两次,然后使用 coalesce()select 条款:

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
v1uwarro

v1uwarro2#

可以按如下方式使用并集:

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\ux”或“dc\ux”,您可以连接不同的表并使用union进行合并。

olmpazwi

olmpazwi3#

试试这个:正确的函数与长度相结合,应该会给你一个方便的方法来剥离这些。

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;

相关问题