SQL 检查两个表中的两列是否完全不相交
SQL Check if two columns from two tables are completely disjoint
我有两张桌子
CREATE TABLE A
ID INT PRIMARY KEY
....
CREATE TABLE B
ID INT PRIMARY KEY
....
如何使用 postgres 检查 A.ID
和 B.ID
是否不相交。
- 不相交意味着
B.ID
中没有值存在于 A.ID
中,反之亦然。
- 我想return一个布尔值。
这是一个例子
/* Returns False */
A.ID: 4, 5, 6, 7
B.ID: 5, 7, 8, 9
/* Returns True */
A.ID: 1, 2, 3, 4
B.ID: 5, 6, 7, 8
如有任何帮助,我们将不胜感激!
谢谢
如果你想确保表没有 id
共同点,你可以这样做:
select bool_and(a.id is distinct from b.id) res
from a
full join b on a.id = b.id
这 returns 一个布尔标志,如果表没有公共 id
.
则设置为 true
这是解决此问题的另一种方法:
SELECT
CASE
WHEN ( SELECT
COUNT(*)
FROM
A
WHERE
ID IN ( SELECT
*
FROM
B
))>0
THEN FALSE
ELSE TRUE
END
我有两张桌子
CREATE TABLE A
ID INT PRIMARY KEY
....
CREATE TABLE B
ID INT PRIMARY KEY
....
如何使用 postgres 检查 A.ID
和 B.ID
是否不相交。
- 不相交意味着
B.ID
中没有值存在于A.ID
中,反之亦然。 - 我想return一个布尔值。
这是一个例子
/* Returns False */
A.ID: 4, 5, 6, 7
B.ID: 5, 7, 8, 9
/* Returns True */
A.ID: 1, 2, 3, 4
B.ID: 5, 6, 7, 8
如有任何帮助,我们将不胜感激!
谢谢
如果你想确保表没有 id
共同点,你可以这样做:
select bool_and(a.id is distinct from b.id) res
from a
full join b on a.id = b.id
这 returns 一个布尔标志,如果表没有公共 id
.
这是解决此问题的另一种方法:
SELECT
CASE
WHEN ( SELECT
COUNT(*)
FROM
A
WHERE
ID IN ( SELECT
*
FROM
B
))>0
THEN FALSE
ELSE TRUE
END