【问题标题】:Get back matched value in list within subquery取回子查询内列表中的匹配值
【发布时间】:2021-06-01 11:17:09
【问题描述】:

我有以下疑问:

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 语句的一部分。

目前我的结果是这样的:

CUI GROUP_CONCAT(CODE separator ';') GROUP_CONCAT(CODE separator ';')
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 CUI GROUP_CONCAT(CODE separator ';') GROUP_CONCAT(CODE separator ';')
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

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

【问题讨论】:

  • 嗯,为什么我的表格没有渲染?
  • @eshirvana 谢谢!
  • 不要习惯在字符串文字中使用双引号。是的,遗憾的是 MySQL 接受了这一点,但在 SQL 中,双引号通常用于标识符,例如列名。如果您曾经使用过另一个 DBMS(或者未来的 MySQL 版本对此更加清醒),您可能会收到“无效的对象名称”错误。始终对字符串文字使用单引号。

标签: mysql sql


【解决方案1】:

对于任何感兴趣的人,这是我为我的用例提出的查询 - 如果有人看到更有效的方法,欢迎批评:)

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

【讨论】:

    【解决方案2】:

    如果您需要来自多个表的列,那么您需要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 BYSELECT 一致。
    • 单引号是 SQL 中字符串的标准。我推荐它们而不是双引号。
    • 不需要子查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 2019-04-04
      • 2020-06-07
      • 1970-01-01
      • 2015-04-06
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多