【问题标题】:Using SQL Server 2016 SPLIT_STRING使用 SQL Server 2016 SPLIT_STRING
【发布时间】:2019-03-10 16:04:20
【问题描述】:

我正在使用

SELECT PMID, PMCID
FROM Publications 
INNER JOIN STRING_SPLIT('29535196,29533737,29425496,28495678,26688618' ,',') ON value = Publications.PMID

这很适合提取我在Publications 表中的出版物,但是有没有办法重组查询以显示缺少哪些值?这意味着如果 29533737 不在数据库中,那么我的结果将是 29533737。过去,如果您检查两个表是否包含所有记录,则类似于 SQL Query to find missing rows between two related tables

如何使用逗号分隔的字符串?我是否必须制作一个临时表,然后处理缺失的行?

谢谢

测试代码:

SELECT value
FROM STRING_SPLIT('1234567, 29535196,29533737,29425496,28495678,26688618' ,',') AS v 
LEFT JOIN Publications p ON v.value = p.PMID
WHERE p.PMID IS NULL;

【问题讨论】:

    标签: sql sql-server-2016


    【解决方案1】:

    你可以使用OUTER JOIN:

    SELECT value, PMID, PMCID
    FROM   Publications 
    RIGHT OUTER JOIN STRING_SPLIT('29535196,29533737,29425496,28495678,26688618' ,',')
      ON value = Publications.PMID
     -- for non exising value in Publications PMID will be NULL
    

    【讨论】:

      【解决方案2】:

      是的。例如,您可以使用left join

      SELECT v.PMID
      FROM STRING_SPLIT('29535196,29533737,29425496,28495678,26688618' ,',') v LEFT JOIN
           Publications p
           ON v.value = p.PMID
      WHERE p.PMID IS NULL;
      

      【讨论】:

      • 如果我将 v(pmid) 更改为 v LEFT JOIN 并选择“Value”,那么它可以工作。我错过了什么吗?
      • @user1314159 。 . .这真的很奇怪。它不接受带有列名的表别名(请参阅dbfiddle.uk/…)。我认为这是一个解析错误。
      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 2017-04-13
      • 2018-04-02
      • 2018-12-24
      • 2017-09-08
      相关资源
      最近更新 更多