mysql - 取回子查询内列表中的匹配值
问题描述
我有以下查询:
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 |
有人可以帮忙吗?我不确定如何在子查询中取回此代码匹配,同时还能够从外部查询中访问代码。
解决方案
如果您想要来自多个表的列,那么您需要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 中字符串的标准。我推荐它们而不是双引号。
- 不需要子查询。
推荐阅读
- r - 在 r 中使用 inner_join 时出现重复行
- spring - Spring data mongo:在同一字段上构建和标准
- scala - Scala(Spark)-当列是列表时如何分组
- java - 功能文件的 CustomDataProvider (QAF)
- php - PHP Instagram API 不发布标题
- ios - 在 IOS 上使用 TensorFlow 库
- java - 在 Java Spring 框架中从字符串调用存储库
- nuget - 使用 Azure AD 工作帐户访问 Azure DevOps 包源
- javascript - className 数组循环上的 SVG setAttribute 不起作用
- java - java - 在 EDT 线程中调用 Thread.sleep() 时,SwingWorker 不运行