ALL和empty set = TRUE

时间:2014-09-23 15:04:31

标签: postgresql

如果所有opertar中的子查询(ALL(某些子查询))返回空集,那么它将始终返回TRUE。像那样:SELECT * FROM some_table WHERE TRUE = ALL(空集)。如何改变这种行为?

1 个答案:

答案 0 :(得分:1)

如果子查询在:

ALL (SELECT ...)

返回空集,结果为NULL

regress=> select all( SELECT true WHERE false );
 bool 
------

(1 row)

如果您想要为true,则必须使用coalesce。由于语法限制,您不能将all直接用作表达式,必须将其包装在子查询中,例如:

regress=> select coalesce( (select all( SELECT true WHERE false )), true);
 coalesce 
----------
 t
(1 row)