从SQL Server 2000上的IN子句返回所有值

时间:2010-09-22 12:56:11

标签: sql-server sql-server-2000 union

有没有办法从IN子句中检索所有数据?

我们假设我的桌子有(ID,姓名):

0 Banana
1 Mango
2 Papaya
3 Lemon

和我的查询:

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

我希望'Orange'返回,使用空ID(因为没有注册)。怎么做?

3 个答案:

答案 0 :(得分:5)

您不能使用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 like the one here(但使用varchar(8000)代替varchar(max))。然后按如下方式使用它。

SELECT ...
FROM dbo.fnSplitStringList('Banana,Mango,Orange') f 
LEFT JOIN Fruits ON Fruits.Name = f.StringLiteral

答案 1 :(得分:0)

按名称右连接,但您需要一个带名称的单独表。

答案 2 :(得分:0)

如果你这样做了一次,我写了一个程序,它简化了创建“IN”子句,在这里:InClauseCreator。但是,如果您经常这样做,那么最好将数据导入临时表,然后进行左连接,接近Martin Smith的建议。