SQL查询,仅当列不为null时选择,否则不选择

Anw*_*war 3 mysql sql null

这就是我想要做的

 SELECT `a`, `b`, `c` FROM `tbl` WHERE `a` IS NOT NULL OR `b` IS NOT NULL OR `c` IS NOT NULL WHERE id = ?
Run Code Online (Sandbox Code Playgroud)

如果a和c为null而b不是,我仍然会收到此结果集\

 a      b     c 
____   ____   ____   

NULL  value   NULL
Run Code Online (Sandbox Code Playgroud)

但是我只希望它返回这个

   b
  ____

  value
Run Code Online (Sandbox Code Playgroud)

提前致谢!

wvd*_*vdz 5

如果要在有两个非空列的情况下获得包含两列的行,而在只有两个非空列的情况下要获得1,则必须动态创建查询。

如果您希望始终有1列,其中每一行都包含一个非null值,则可以使用并集来实现。

SELECT a FROM tbl WHERE a IS NOT NULL AND id = ?
UNION
SELECT b FROM tbl WHERE b IS NOT NULL AND id = ?
UNION
SELECT c FROM tbl WHERE c IS NOT NULL AND id = ?
Run Code Online (Sandbox Code Playgroud)

如果您想知道这些值来自哪一列,可以执行以下操作:

SELECT 'col a' AS ColName, a FROM tbl WHERE a IS NOT NULL AND id = ?
UNION
SELECT 'col b', b FROM tbl WHERE b IS NOT NULL AND id = ?
UNION
SELECT 'col c', c FROM tbl WHERE c IS NOT NULL AND id = ?
Run Code Online (Sandbox Code Playgroud)

注意:联合还删除重复的结果。如果要保留重复项,请使用UNION ALL