2011-10-25 21 views
0

這裏是DB模式PostgreSQL的 - 加入3代表子查詢鍵值對

表 -

enter image description here

我想編寫一個查詢來尋找具有類似元數據值的所有文件( 'abc') 並獲取該文件的特定對應元數據值。

因此,對於上面搜索所有具有abc1作爲其中一個值的文件並給我其對應的「地理」鍵的值。 我知道這可以通過子查詢完成。但是想找到最有效的方法。

回答

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

+0

「geo」的選擇性是什麼意思? – Harpreet

+0

@Harpreet如果'm_key'不是唯一的 - 特別是,如果可以有'm.m_key ='geo'' - 註釋子句會有所作爲。 –

+0

我不認爲問題中的'技術'(關係分割,儘管是簡化形式)在這裏直接相關。 – onedaywhen