【发布时间】:2014-06-13 15:59:12
【问题描述】:
我有一张这样的桌子:
id | val
---------
1 | abc
2 | def
5 | xyz
6 | foo
8 | bar
和类似的查询
SELECT id, val FROM tab WHERE id IN (1,2,3,4,5)
返回
id | val
---------
1 | abc
2 | def
5 | xyz
有没有办法让它在缺少 id 时返回 NULLs,即
id | val
---------
1 | abc
2 | def
3 | NULL
4 | NULL
5 | xyz
我想应该有一个棘手的 LEFT JOIN 本身,但我无法理解它。
编辑:我看到人们认为我想按顺序“填补空白”,但实际上我想要的是用 NULL 替换 IN 列表中的缺失值。比如这个
SELECT id, val FROM tab WHERE id IN (1,100,8,200)
应该返回
id | val
---------
1 | abc
100 | NULL
8 | bar
200 | NULL
此外,顺序并不重要。
EDIT2:只需添加几个相关链接:
【问题讨论】:
-
你可以用数字表左连接。
-
@hovanessyan 它不是重复的(嗯,至少不是那个问题)——因为这个问题是关于存在序列的 sql server 的——这与 mysql 在这个问题上有很大的不同跨度>