PostgreSQL联盟两个表,并加入第三个表
问题描述:
我想联合到表和加入他们与第三个元数据表,我想知道哪种方法是最好的/最快的?
该数据库是PostgreSQL。
下面是我的两个建议,但其他方法是受欢迎的。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
答
由于sql-engine optimizator,它可能是不可预知的。最好看一下执行计划。最后两种方法可以以同样的方式
答
表示,只要我能记得,运行解释就会发现,PostgreSQL的解释为第一提供没有group by
条款(显式或隐式的第二个因union
而不是union all
)在任何子查询中。
我在(人类)眼睛上发现第二个更容易。我通常会选择最“关系健全”的方法,或者最简单的方式来阅读和维护(通常是同样的事情,这不仅仅是巧合),除非它对另一个候选构造执行得非常糟糕。 – onedaywhen 2011-05-17 12:55:02