我有一个简单的查询,它只选择一个字段和一行,因此只有一个值。如果查询结果是空集,有没有办法使它返回NULL?而不是返回零行?我想我需要使用一些不存在,然后空,但不确定它。
lb3vh1jj1#
select (Your entire current Select statement goes here) as Alias from dual
dual是一个内置的表,只有一行,可以用于类似的目的。在甲骨文中,这是强制性的,直到23 c。MySQL supports it,但您也可以只选择单个值而不指定表,如下所示:
dual
select (Your entire current Select statement goes here) as Alias
在任何一种情况下,您都选择了一个值。这意味着:
blmhpbnm2#
一个简单的方法是聚合:
select max(col) from t where <your condition here>
这总是返回一行。如果没有匹配,则返回NULL。
NULL
qco9c6ql3#
我认为这是最简单的方法:
SELECT IFNULL((SELECT your query), NULL)
z5btuh9x4#
将UNION与NOT EXISTS一起使用(原始where子句)
select col1 from mytable where <some condition> union select null where not exists ( select * from mytable where <some condition>)
d8tt03nd5#
例如,您可以使用COALESCE:SELECT COALESCE(Field1,NULL) AS Field1 FROM Table1
SELECT COALESCE(Field1,NULL) AS Field1 FROM Table1
**编辑1:**抱歉,我错把return field当成null而不是result set,对于result set return as null,使用Union和Exist函数,如下所示:
SELECT NULL AS Field1 FROM Table1 WHERE not EXISTS(SELECT Field1 FROM Table1 WHERE Field2>0) UNION SELECT Field1 FROM Table1 WHERE Field2>0
5条答案
按热度按时间lb3vh1jj1#
dual
是一个内置的表,只有一行,可以用于类似的目的。在甲骨文中,这是强制性的,直到23 c。MySQL supports it,但您也可以只选择单个值而不指定表,如下所示:在任何一种情况下,您都选择了一个值。这意味着:
blmhpbnm2#
一个简单的方法是聚合:
这总是返回一行。如果没有匹配,则返回
NULL
。qco9c6ql3#
我认为这是最简单的方法:
z5btuh9x4#
将UNION与NOT EXISTS一起使用(原始where子句)
d8tt03nd5#
例如,您可以使用COALESCE:
SELECT COALESCE(Field1,NULL) AS Field1 FROM Table1
**编辑1:**抱歉,我错把return field当成null而不是result set,对于result set return as null,使用Union和Exist函数,如下所示: