这就是我想要做的事情
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
提前致谢!
答案 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
。