Использование SQL Server 2016 SPLIT_STRING - PullRequest
0 голосов
/ 10 марта 2019

Я использую

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

И это прекрасно работает, чтобы вытащить мои публикации в таблицу Publications, но есть ли способ реструктурировать запрос, чтобы показать, какие значения отсутствуют?Это означает, что если 29533737 нет в базе данных, то мой результат будет 29533737. В прошлом, если вы проверяли, есть ли в двух таблицах все записи, это было бы похоже на Запрос SQL для поиска пропущенных строк между двумя связанными таблицами

Как я могу сделать это с помощью строки через запятую?Нужно ли создавать временную таблицу, а затем обрабатывать недостающую строку?

Спасибо

Протестированный код:

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;

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Да. Вы можете использовать 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;
1 голос
/ 10 марта 2019

Вы можете использовать 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
...