postgres快速检查属性组合是否也存在于另一个表中

时间:2017-08-22 06:01:56

标签: sql postgresql select

我想检查两个不同的表中是否存在相同的两个属性值。如果table_a中的组合不存在于table_b中,则应将其插入到select语句表中。现在我有以下查询,它正在运行:

CREATE TABLE table_a (
attr_a integer,
attr_b text,
uuid character varying(200),
CONSTRAINT table_a_pkey PRIMARY KEY (uuid)
);

CREATE TABLE table_b (
attr_a integer,
attr_b text,
uuid character varying(200),
CONSTRAINT table_b_pkey PRIMARY KEY (uuid)
);


SELECT * FROM table_a
        WHERE (table_a.attr_a::text || table_a.attr_b::text) != ALL(SELECT (table_b.attr_a::text || table_b.attr_a::text) FROM table_b)

但是,执行时间很长。所以我想问一下是否有更快的解决方案来检查。

1 个答案:

答案 0 :(得分:1)

您的where子句使用attr_a的操作(将其转换为文本并与attr_b结合),因此无法使用索引。而不是这种连接,为什么不尝试一个直接的exists运算符?

SELECT *
FROM   table_a a
WHERE  NOT EXISTS (SELECT *
                   FROM   table_b b
                   WHERE  a.attr_a = b.attr_a AND
                          b.attr_b = b.attr_b)
相关问题