SQL查询,仅选择列是否为空,否则不要选择

时间:2014-06-28 23:05:55

标签: 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 = ?

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

 a      b     c 
____   ____   ____   

NULL  value   NULL

但我只想要它返回

   b
  ____

  value

提前致谢!

1 个答案:

答案 0 :(得分:4)

如果要在有两个非空列时获取包含两列的行,并且如果只有一列则需要1,则必须动态创建查询。

如果你想要总是有一列,每行包含一个非空值,你可以用一个联合。

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 = ?

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

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 = ?

注意:union也会删除重复的结果。如果您想保留重复项,请使用UNION ALL