テーブルにデータを書き込み、書き込まれたデータのバッチごとに「グループ ID」を割り当てています。説明のために、次の表を検討してください。
GroupId Value
------- -----
1 a
1 b
1 c
2 a
2 b
3 a
3 b
3 c
3 d
この例では、データの 3 つのグループがあり、それぞれが似ているが異なる値を持っています。
このテーブルにクエリを実行して、特定の値のセットを含むグループを見つけるにはどうすればよいですか? たとえば、(a,b,c) をクエリすると、結果はグループ 1 になります。同様に、(b,a) をクエリするとグループ 2 になり、(a, b, c, e) をクエリするとグループ 2 になります。空のセットになるはずです。
次の手順を実行するストアド プロシージャを作成できます。
- Groups から個別の GroupId を選択し、ローカルに保存します
- 個別の GroupId ごとに:
except
入力値とテーブル値 (グループの場合) の間で set-difference ( ) を実行し、その逆も同様です。 - set-difference 操作の両方で空のセットが生成された場合は GroupId を返します
これは少しやり過ぎに思えます。単純化するために SQL の他のコマンドを活用したいと考えています。このコンテキストでセット比較を実行する、またはクエリの正確な入力値を含むグループ ID を選択する簡単な方法はありますか?