为IN列表中的缺失值返回NULL

geo*_*org 6 mysql sql

我有这样一张桌子:

 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:只需添加几个相关链接:

fth*_*lla 2

你可以使用这个技巧:

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)

请参阅此处的小提琴。