0

私の問題は、グループ化された一意のデータセットの ID のみを表示しています。簡単な例が最も役立ちます。

| id | color |
--------------
| 1  | red   |
--------------
| 1  | green |
--------------
| 1  | blue  |
--------------
| 2  | red   |
--------------
| 2  | green |
--------------
| 2  | blue  |
--------------
| 3  | red   |
--------------
| 3  | blue  |
--------------
| 3  | yellow|
--------------
| 3  | purple|
--------------

ID 1 と ID 2 には同じデータのサブセット (赤、緑、青) があるため、結果テーブルには 1 または 2 のみが含まれている必要があります。

| id |
------
| 1  |
------
| 3  | 
------

この比較的基本的な問題は何度も尋ねられたと思いますが、結果を生み出す特定のキーワードを突き止めることができませんでした。

4

2 に答える 2

1

SQL はセット指向なので、これを試してみましょう。

一意の ID は、同じ色のセットを持つ ID が他に存在しない ID です。

2 つの ID の色のセットが等しいかどうかを判断するには、それらを互いに減算EXCEPTし (これがそうです)、結果が両方向で空であるかどうかをテストします。

SELECT id
FROM (SELECT DISTINCT id FROM t) AS t1
WHERE NOT EXISTS (SELECT id FROM (SELECT DISTINCT id FROM t) AS t2
                  WHERE t2.id < t1.id
                    AND NOT EXISTS (SELECT color FROM t WHERE id = t1.id
                                    EXCEPT
                                    SELECT color FROM t WHERE id = t2.id)
                    AND NOT EXISTS (SELECT color FROM t WHERE id = t2.id
                                    EXCEPT
                                    SELECT color FROM t WHERE id = t1.id));

SQL フィドル

于 2013-06-06T13:56:04.623 に答える