📜  PostgreSQL – 比较表

📅  最后修改于: 2022-05-13 01:57:14.835000             🧑  作者: Mango

PostgreSQL – 比较表

在 PostgreSQL 中,有多种方法可以比较两个表以找出它们之间的差异。在本文中,我们将研究两种最常用的技术。

1. 使用 EXCEPT 和 UNION运算符的比较

首先,让我们创建两个名为foo 的 bar ,并插入一些示例数据进行演示。

CREATE TABLE foo (
    ID INT PRIMARY KEY,
    NAME VARCHAR (50)
);
INSERT INTO foo (ID, NAME)
VALUES
    (1, 'a'),
    (2, 'b');


CREATE TABLE bar (
    ID INT PRIMARY KEY,
    NAME VARCHAR (50)
);
INSERT INTO bar (ID, NAME)
VALUES
    (1, 'a'),
    (2, 'b');


foo table 与bar具有相同的结构和数据 桌子。

接下来,我们更新栏中的一行 桌子。



UPDATE bar
SET name = 'c'
WHERE
    id = 2;


现在我们的表格如下所示:

psql表比较

然后,要查找foo表中但不在bar表中的行,我们使用以下查询:

SELECT
    ID,
    NAME,
    'not in bar' AS note
FROM
    foo
EXCEPT
    SELECT
        ID,
        NAME,
        'not in bar' AS note
    FROM
        bar;


输出:

我们使用了EXCEPT 返回foo中行的运算符 桌子但不在酒吧里 桌子。我们可以应用相同的技术来查找bar表中但不在foo表中的行。

SELECT
    ID,
    NAME,
    'not in foo' AS note
FROM
    bar
EXCEPT
    SELECT
        ID,
        NAME,
        'not in foo' AS note
    FROM
        foo;

输出:

比较 psql 中的表



2. 使用 OUTER JOIN 的比较

OUTER JOIN 可用于比较两个表,如下所示:

SELECT
    id,
    name
FROM
    foo
FULL OUTER JOIN bar USING (id, name)
WHERE
    foo.id IS NULL
OR bar.id IS NULL;

输出:

查找foo 中的行数 桌子但不是酒吧 反之亦然,我们使用COUNT函数如下:

SELECT
    COUNT (*)
FROM
    foo
FULL OUTER JOIN bar USING (id, name)
WHERE
    foo.id IS NULL
OR bar.id IS NULL;

输出: