如何在 PostgreSQL 中模拟 XOR 函数?或者,至少,我认为这是一种异或的情况。
假设数据如下:
id | col1 | col2 | col3
---+------+------+------
1 | 1 | | 4
2 | | 5 | 4
3 | | 8 |
4 | 12 | 5 | 4
5 | | | 4
6 | 1 | |
7 | | 12 |
我想为那些只填写一列的行返回一列。(暂时忽略col3
..
让我们从这个 2 列的例子开始:
SELECT
id, COALESCE(col1, col2) AS col
FROM
my_table
WHERE
COALESCE(col1, col2) IS NOT NULL -- at least 1 is filled in
AND
(col1 IS NULL OR col2 IS NULL) -- at least 1 is empty
;
这很好,应该导致:
id | col
---+----
1 | 1
3 | 8
6 | 1
7 | 12
但是现在,我想以col3
类似的方式包括在内。像这样:
id | col
---+----
1 | 1
3 | 8
5 | 4
6 | 1
7 | 12
如何做到这一点是一种更通用的方式?Postgres 是否支持这种方法?
我找不到类似的东西。