次の形式のテーブルがあります。
row_key extID tag val
------- ----- --- ---
1 1 A a
2 1 A b
3 1 B c
4 2 A d
5 2 C e
ここで、特定の値を持つ(tag、val)のペアがいくつかあるすべてのextIDを取得したいと思います。次に例を示します。
(tag, val) = (A,a) AND (tag, val) = (B,c)
また、
(tag, val) = (C,e)
制約の数は変更できます。
私はこれを行うためのいくつかの方法を考えることができます:
- 制約ごとに自己結合を実行します
- 呼び出し元プログラムで(繰り返し)検索を実行します(複数のSQLクエリ)
- (たぶん?)これを行うためのSQL関数を書く
- ネストされたSELECT句(外部レベルに「extID」を渡し、
WHERE extID IN (SELECT extID FROM ...)
- 私が見つけることができない唯一の真の解決策。
これを行うための好ましい(最も速くて最もエレガントな)方法はどれですか?(もちろん、「確かに、5。が正解です。」を除いて)
複数のSELF-joinは非常にエレガントだと思います。しかし、それが高速で比較的メモリ効率が良いかどうかはわかりません。
さらに、MySQL、PostgreSQL、SQLiteを適応させずに動作する方法を使用したいので、PIVOTafaiuを使用できません。