0
這裏是DB模式PostgreSQL的 - 加入3代表子查詢鍵值對
表 -
我想編寫一個查詢來尋找具有類似元數據值的所有文件( 'abc') 並獲取該文件的特定對應元數據值。
因此,對於上面搜索所有具有abc1作爲其中一個值的文件並給我其對應的「地理」鍵的值。 我知道這可以通過子查詢完成。但是想找到最有效的方法。
這裏是DB模式PostgreSQL的 - 加入3代表子查詢鍵值對
表 -
我想編寫一個查詢來尋找具有類似元數據值的所有文件( 'abc') 並獲取該文件的特定對應元數據值。
因此,對於上面搜索所有具有abc1作爲其中一個值的文件並給我其對應的「地理」鍵的值。 我知道這可以通過子查詢完成。但是想找到最有效的方法。
可能看起來像這樣。應該是最有效的方式。
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。
「geo」的選擇性是什麼意思? – Harpreet
@Harpreet如果'm_key'不是唯一的 - 特別是,如果可以有'm.m_key ='geo'' - 註釋子句會有所作爲。 –
我不認爲問題中的'技術'(關係分割,儘管是簡化形式)在這裏直接相關。 – onedaywhen