ホームページ >データベース >mysql チュートリアル >MySQL カラムに別のカラムの値がすべて含まれているかどうかを確認するにはどうすればよいですか?
列に MySQL データベース内の別の列の値がすべて含まれているかどうかを確認する
次の 2 つのテーブル T1 と T2 について考えます。構造体:
T1:
personID | stuffID |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
1 | 4 |
2 | 1 |
2 | 4 |
3 | 1 |
3 | 2 |
T2:
stuffID |
---|
1 |
2 |
3 |
目標は、すべての personID 値を取得することです。 T2 のすべてのスタッフ ID 値に関連付けられている T1 からのデータ。この例では、T2 に存在する 3 つのスタッフ ID すべてのレコードを持っているのは personID 1 のみであるため、結果は 1 になります。
解決策:
これを実現するには、次のようにします。 2 段階のプロセス:
ステップ 1: 一致するものを特定するrecords
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2)
このサブクエリは、T2 に一致するスタッフ ID が少なくとも 1 つあるすべての personID 値を T1 から取得します。
ステップ 2: 完全性を確認する
GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
この部分は、ステップ 1 の結果を personID ごとにグループ化し、カウントされているかどうかを確認します。各グループの個別のスタッフ ID 値の数は、T2 内のスタッフ ID 値の数と同じです。そうである場合、personID が T2 のすべてのスタッフ ID 値に関連付けられていることを示します。
最終クエリ:
両方の手順を組み合わせると、列に次の値が含まれているかどうかを確認する最終クエリが作成されます。 MySQL の別の列のすべての値は次のとおりです:
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2) GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
以上がMySQL カラムに別のカラムの値がすべて含まれているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。