PostgreSQL - 连接3个表子查询 - 键值对

时间:2011-10-25 01:36:38

标签: sql database postgresql join

这是db架构

表 -

enter image description here

我想写一个查询来搜索所有具有元数据值的文件,如('abc') 并获取该文件的特定对应元数据值。

因此,上面搜索所有具有abc1作为其中一个值的文件,并给我相应的'geo'键的值。 我知道它可以通过子查询来完成。但是想找到最有效的方法。

1 个答案:

答案 0 :(得分:1)

看起来像这样。也应该是最有效的方式。

SELECT m0.m_value
FROM   metadata m
JOIN   file_metadata fm ON fm.m_foreign_key = m.m_id
JOIN   file_metadata fm0 ON fm0.f_foreign_key = fm.f_foreign_key
--                      AND fm0.m_foreign_key <> fm.m_foreign_key
--  may or may not be necessary, depending on the selectivity of 'geo'
JOIN   metadata m0 ON m0.m_id = fm0.m_foreign_key
WHERE  m.m_value = 'abc1'
AND    m0.key = 'geo'

确保在一个查询中将别名分配给同一个表的多个实例。

有关相关查询技术的概述,请参阅此阵容:How to filter SQL results in a has-many-through relation