PostgreSQL将两个表合并并与第三个表连接

10
我想要将两个表合并,然后用第三个元数据表进行连接,我想知道哪种方法是最好/最快的?数据库是PostgreSQL。下面是我的两个建议,但也欢迎其他方法。
在两个表进行联接之前先进行联接操作:
SELECT a.id, a.feature_type, b.datetime, b.file_path
FROM table1 a, metadata b WHERE a.metadata_id = b.id
UNION ALL
SELECT a.id, a.feature_type, b.datetime, b.file_path
FROM table2 a, metadata b WHERE a.metadata_id = b.id

或者先进行合并,再进行连接:

SELECT a.id, a.feature_type, b.datetime, b.file_path
FROM
(
    SELECT id, feature_type, metadata_id FROM table1
    UNION ALL
    SELECT id, feature_type, metadata_id FROM table2
)a, metadata b
WHERE a.metadata_id = b.id

我认为第二种方式更易于(人类)观察。通常我会选择最“关系合理”的方法或最容易阅读和维护的方法(这通常是同一件事情,这不仅仅是巧合),除非它在与另一个候选结构相比表现真的很差。 - onedaywhen
第一种方法对我来说可以获取数据。那么你如何将它插入到table2中呢? - mga
我在选择语句之前添加了一个 insert into (columns),然后成功地添加了行。 - mga
3个回答

8

在两个语句上运行EXPLAIN ANALYZE,然后你就会看到哪一个更有效率。


1

由于SQL引擎优化器的存在,它可能是不可预测的。最好查看执行计划。最终,这两种方法可以以相同的方式表示。


0
就我所记得的,运行Explain将显示PostgreSQL将第二个解释为第一个,前提是在任何子查询中都没有group by子句(显式或隐式由于使用union而不是union all)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接