首页 > 解决方案 > 取回子查询内列表中的匹配值

问题描述

我有以下查询:

SELECT CUI,
    GROUP_CONCAT(CODE separator ';'),
    GROUP_CONCAT(SAB separator ';') 
    FROM umls.MRCONSO
WHERE CUI in (SELECT CUI FROM umls.MRCONSO WHERE code in ("10012271", "114480"))
GROUP BY CUI;

作为 where 子句的一部分,我想“获取”在WHERE子句中的子查询中匹配的代码,并将其作为外部SELECT语句的一部分。

目前我的结果是这样的:

GROUP_CONCAT(代码分隔符';') GROUP_CONCAT(代码分隔符';')
C0002395 R0121040;0000049799;10012271;D000544;NOCODE;D000544 MDRJPN;MDRRUS;OMIM;NCI;ICD10CM;MDRHUN
C0002396 R0121041;0000049780;114480;D000544;NOCODE;D000544 MDRJPN;MDRRUS;OMIM;NCI;ICD10CM;MDRHUN

但我想:

<MATCH_CODE GROUP_CONCAT(代码分隔符';') GROUP_CONCAT(代码分隔符';')
10012271 C0002395 R0121040;0000049799;10012271;D000544;NOCODE;D000544 MDRJPN;MDRRUS;OMIM;NCI;ICD10CM;MDRHUN
114480 C0002396 R0121041;0000049780;114480;D000544;NOCODE;D000544 MDRJPN;MDRRUS;OMIM;NCI;ICD10CM;MDRHUN

有人可以帮忙吗?我不确定如何在子查询中取回此代码匹配,同时还能够从外部查询中访问代码。

标签: mysqlsql

解决方案


如果您想要来自多个表的列,那么您需要JOIN. 您可以使用:

SELECT mx.Code as MatchCode, m.CUI,
       GROUP_CONCAT(m.CODE separator '|') as Codes, 
       GROUP_CONCAT(m.SAB separator '|') as Sources
FROM umls.MRCONSO m JOIN
     umls.MRCONSO mx
     ON x.cui = m.cui AND
        mx.code in ('104300', '114480') AND
        mx.sab in ('OMIM')
GROUP BY m.CUI, mx.Code;

笔记:

  • 此代码使用正确的JOIN语法。
  • GROUP BY一致SELECT
  • 单引号是 SQL 中字符串的标准。我推荐它们而不是双引号。
  • 不需要子查询。

推荐阅读