Mysql 根据列值,查询不同的表
我有一个表,其中每个标识符值都是唯一的。根据它的CC还是DC,我需要用不同的表连接它,例如,如果它的“CC_uu”我需要将它映射到表B,如果它的“DC_u”我需要将它映射到表C 表A: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
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
。