Вернуть все значения из предложения IN на SQL Server 2000 - PullRequest
1 голос
/ 22 сентября 2010

Есть ли способ извлечь все данные из предложения IN?

Давайте предположим, что моя таблица получила (ID, имя):

0 Banana
1 Mango
2 Papaya
3 Lemon

и мой запрос:

SELECT * FROM Fruits WHERE Name IN (Banana,Mango,Orange)

Я хочу, чтобы «Orange» вернулся с пустым идентификатором (поскольку там нет регистра) Как это сделать?

Ответы [ 3 ]

5 голосов
/ 22 сентября 2010

Для этого нельзя использовать предложение IN. Вам нужно собрать целевые фрукты в стол, к которому вы можете присоединиться.

SELECT ...
FROM 
(SELECT 'Banana' AS fruit UNION ALL SELECT 'Mango' UNION ALL SELECT 'Orange') f 
LEFT JOIN Fruits ON Fruits.Name = f.fruit

Или вариант 2 (если ваш список <= 8000 символов). Создайте UDF <a href="http://www.sqlusa.com/bestpractices/training/scripts/userdefinedfunction/" rel="nofollow noreferrer">, как здесь (но с использованием varchar(8000) вместо varchar(max)). Затем используйте его следующим образом.

SELECT ...
FROM dbo.fnSplitStringList('Banana,Mango,Orange') f 
LEFT JOIN Fruits ON Fruits.Name = f.StringLiteral
0 голосов
/ 22 сентября 2010

Если вы делаете это один раз, я написал программу, которая упрощает создание предложения "IN", здесь: InClauseCreator .Однако если вы делаете это регулярно, то вам лучше импортировать данные во временную таблицу, а затем выполнить левое соединение, близкое к тому, что предложил Мартин Смит.

0 голосов
/ 22 сентября 2010

Правильное объединение по имени, но вам нужна отдельная таблица с именами.

...