13

I have a simple query that selects one field and only one row, thus one value.

Is there any way to make it return NULL if the query results in an empty set? Instead of returning zero rows?

I think I need to use something with NOT EXISTS, THEN NULL but not certain about it.

4

4 回答 4

24
select
  (Your entire current Select statement goes here) as Alias
from 
  dual

dual是具有单行的内置表,可用于此类目的。在 Oracle 中,这是强制性的。MySQL 支持它,但您也可以只选择一个值而不指定表,如下所示:

select
  (Your entire current Select statement goes here) as Alias

在任何一种情况下,您都选择一个值。这意味着:

  • 如果您的选择返回一个值,则返回该值。
  • 如果您的 select 语句返回一列,但没有行,则将返回 NULL。
  • 如果您的 select 语句返回多列和/或多行,这将不起作用并且查询失败。
于 2013-06-22T11:34:09.427 回答
14

一个简单的方法是聚合:

select max(col)
from t
where <your condition here>

这总是返回一行。如果没有匹配,则返回NULL

于 2013-06-22T11:34:17.907 回答
0

例如,您可以使用 COALESCE:

SELECT COALESCE(Field1,NULL) AS Field1 FROM Table1

编辑 1: 对不起,我错误地将返回字段作为 null 而不是结果集,对于结果集返回为 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
于 2013-06-22T11:34:41.207 回答
0

使用带有 NOT EXISTS 的 UNION(原始 where 子句)

select col1
from mytable
where <some condition>
union
select null
where not exists (
    select *  from mytable
    where <some condition>)
于 2013-06-22T11:36:20.560 回答