ホームページ > データベース > mysql チュートリアル > SQL で複数のロール ID を持つ個別のユーザー ID を選択する方法は?

SQL で複数のロール ID を持つ個別のユーザー ID を選択する方法は?

DDD
リリース: 2025-01-19 16:57:09
オリジナル
721 人が閲覧しました

How to Select Distinct User IDs with Multiple Role IDs in SQL?

複数の行にわたって特定のロール ID 基準を満たすユーザー ID を取得する

この記事では、データベース テーブル内の異なる行にまたがる複数のロール ID 条件を満たす一意のユーザー ID を選択するという課題について説明します。 userrole 列と userid 列を持つ roleid テーブルを考えてみましょう:

userid roleid
1 1
1 2
1 3
2 1

目標は、userid 値 1、2、および 3 に関連付けられたすべての個別の roleid 値を識別することです。サンプル データを使用すると、期待される出力は userid 1 になります。2 つの SQL アプローチでこれを達成できます。

方法 1: HAVING 句を使用した集計クエリ

このメソッドは集計関数と HAVING 句を利用します:

<code class="language-sql">SELECT userid
FROM userrole
WHERE roleid IN (1, 2, 3)
GROUP BY userid
HAVING COUNT(DISTINCT roleid) = 3;</code>
ログイン後にコピー

このクエリは、最初に roleid が 1、2、または 3 である行をフィルターします。次に、結果を userid ごとにグループ化し、以下を使用して各ユーザーの 個別の roleid 値の数をカウントします。 COUNT(DISTINCT roleid)HAVING 句は、正確に 3 つの異なるロール ID を持つユーザーのみを含むようにフィルター処理します。

方法 2: 自己結合クエリ

特に大規模なデータセットの場合、より効率的な代替手段は、自己結合アプローチです。

<code class="language-sql">SELECT DISTINCT t1.userid
FROM userrole t1
JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2
JOIN userrole t3 ON t1.userid = t3.userid AND t3.roleid = 3
WHERE t1.roleid = 1;</code>
ログイン後にコピー

このクエリは 3 つの自己結合を使用します。t1roleid 1 でユーザーを選択します。 t2roleid 2 も持っていることを保証します。 t3 は、roleid 3 があることを確認します。DISTINCT は、一意の userid 値のみが返されることを保証します。

最適なアプローチ (集計と結合) は、テーブルのサイズとデータの分散によって異なります。 行が一致する可能性が低いシナリオでは、自己結合メソッドのパフォーマンスが向上する傾向があります。

以上がSQL で複数のロール ID を持つ個別のユーザー ID を選択する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート