2011-10-25 4 views
0

への参加は、DBスキーマPostgreSQLの - ここでは3つのテーブルサブクエリ、キーと値のペア

Tables-

enter image description here

である私は(のようなメタデータ値を持つすべてのファイルを検索するためのクエリを作成したいです'abc') を取得し、そのファイルに対応する特定のメタデータ値を取得します。

上記のように、値の1つとして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' 

同じテーブルの複数のインスタンスに1つのクエリでエイリアスを割り当ててください。

関連するクエリテクニックの概要については、How to filter SQL results in a has-many-through relationを参照してください。

+0

「ジオ」の選択性はどういう意味ですか? – Harpreet

+0

@Harpreet 'm_key'が一意でない場合、特に' m.m_key = 'geo''がある場合、コメントされた句は違いになります。 –

+0

質問の中の「テクニック」(リレーショナル部門は簡略化された形式ではありますが)はここでは直接関係しないと思います。 – onedaywhen

関連する問題