SQL SELECT中的布尔逻辑

use*_*081 2 sql postgresql boolean-expression

有没有更简单的实施方法

select (case when ((a is null) or (b is null)) then null else (case when
(a = b) then true else false end) end) from ...
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL或其他主要的RDBMS中呢?

Gor*_*off 5

我认为最简单的是:

select (a = b)
Run Code Online (Sandbox Code Playgroud)

尽管这并不是您的逻辑,但NULL如果aor或bare,则返回此值NULL。可能已经足够了。

如果你希望它返回false,如果任何 abNULL,但不同时,则:

select (a = b) and nullif(coalesce(a, b) is null, true)
Run Code Online (Sandbox Code Playgroud)

编辑:

因为您询问其他数据库,所以表达逻辑的一种方法是:

(case when a = b then 1 when a <> b then 0 end) as flag
Run Code Online (Sandbox Code Playgroud)

NULL如果为,则返回NULL