我有这样一张桌子:
id | val
---------
1 | abc
2 | def
5 | xyz
6 | foo
8 | bar
Run Code Online (Sandbox Code Playgroud)
和查询一样
SELECT id, val FROM tab WHERE id IN (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
返回
id | val
---------
1 | abc
2 | def
5 | xyz
Run Code Online (Sandbox Code Playgroud)
有没有办法让它返回NULL丢失的id,即
id | val
---------
1 | abc
2 | def
3 | NULL
4 | NULL
5 | xyz
Run Code Online (Sandbox Code Playgroud)
我想应该有一个棘手的LEFT JOIN与它本身,但不能包围我的头.
编辑:我看到人们正在考虑我想在序列中"填补空白",但实际上我想要的是将NULL替换为IN列表中的缺失值.例如,这个
SELECT id, val FROM tab WHERE id IN (1,100,8,200)
Run Code Online (Sandbox Code Playgroud)
应该回来
id | val
---------
1 | abc
100 | NULL
8 | bar
200 | NULL
Run Code Online (Sandbox Code Playgroud)
此外,订单无关紧要.
EDIT2:只需添加几个相关链接:
你可以使用这个技巧:
SELECT v.id, t.val
FROM
(SELECT 1 AS id
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5) v
LEFT JOIN tab t
ON v.id = t.id
Run Code Online (Sandbox Code Playgroud)
请参阅此处的小提琴。