有没有办法从IN
子句中检索所有数据?
我们假设我的桌子有(ID,姓名):
0 Banana
1 Mango
2 Papaya
3 Lemon
和我的查询:
SELECT * FROM Fruits WHERE Name IN (Banana,Mango,Orange)
我希望'Orange'返回,使用空ID(因为没有注册)。怎么做?
答案 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的建议。