这就是我想要做的
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)
提前致谢!
如果要在有两个非空列的情况下获得包含两列的行,而在只有两个非空列的情况下要获得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。