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.IDB.ID 是否不相交。

这是一个例子

/* 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