Mysql 根据列值,查询不同的表

Mysql 根据列值,查询不同的表,mysql,sql,database,string,join,Mysql,Sql,Database,String,Join,我有一个表,其中每个标识符值都是唯一的。根据它的CC还是DC,我需要用不同的表连接它,例如,如果它的“CC_uu”我需要将它映射到表B,如果它的“DC_u”我需要将它映射到表C 表A: ID | IDENTIFIER 1 | CC_1234567 2 | DC_9494949 表B: ID| SOURCE. |INSTRUMENT 7 | 1234567. | 545454 表C: ID | SOURCE | INSTRUMENT 8 |. 9494949 |. 636363

我有一个表,其中每个标识符值都是唯一的。根据它的CC还是DC,我需要用不同的表连接它,例如,如果它的“CC_uu”我需要将它映射到表B,如果它的“DC_u”我需要将它映射到表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_1234567”中得到“1234567”和 第二,在编写连接查询时,我将在最终生成的表中获得其他列,例如B.INSTRUMENT、C.INSTRUMENT。 表A中的每个标识符仅映射到表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

您可以
左连接
两次,然后在
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)
where a.source is not null or b.source is not null
如果两个表中都有匹配项,则上述查询将优先考虑
tableb

如果要排除两个表中不匹配的行,则可以添加以下
where
子句:

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)
where a.source is not null or b.source is not null

您可以
左连接
两次,然后在
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)
where a.source is not null or b.source is not null
如果两个表中都有匹配项,则上述查询将优先考虑
tableb

如果要排除两个表中不匹配的行,则可以添加以下
where
子句:

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)
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_uu”或“DC_uu”的不同,您可以使用UNION连接不同的表并进行合并。

您可以使用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_uu”或“DC_uu”,您可以加入不同的表并使用UNION进行合并。

尝试以下方法:将正确的函数与长度相结合,将为您提供一种方便的方法,可以继续剥离这些表

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;

试试这个:正确的功能和长度相结合,应该会给你一个方便的方法来去除这些

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;
SUBSTR(A.IDENTIFIER,4)
跳过前3个字符,例如将
CC_1234567
转换为
1234567
SUBSTR(A.IDENTIFIER,4)
跳过前3个字符,例如将
CC_1234567
转换为
1234567