一意の条件を満たす行全体で値を選択します
この質問は、userid と roleid という 2 つの列を持つテーブルがあるシナリオについて説明しています。目標は、指定された 3 つのロール ID をすべて持つ一意のユーザー ID を取得することです。
1 つの方法は、集約とフィルタリングを組み合わせることです。
<code class="language-sql">SELECT userid FROM userrole WHERE roleid IN (1, 2, 3) GROUP BY userid HAVING COUNT(1) = 3</code>
このクエリは、ユーザー ID ごとに結果をグループ化し、ユーザー ID ごとに各ロール ID の出現数をカウントします。 HAVING 句により、3 つの異なるロール ID を持つユーザー ID のみが選択されるようになります。
ただし、特に大規模なデータセットを扱う場合は、結合を使用する別のアプローチの方が効率的である可能性があります。
<code class="language-sql">SELECT t1.userid FROM userrole t1 JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2 JOIN userrole t3 ON t2.userid = t3.userid AND t3.roleid = 3 AND t1.roleid = 1</code>
このクエリは、ネストされた結合を利用して、指定されたロール ID に基づいてユーザー ID を選択します。外部結合条件は、各ユーザー ID の各ロール ID の存在をチェックし、最後の AND 条件は、選択したユーザー ID が指定された 3 つのロール ID をすべて持っていることを確認します。
データの分散と基盤となるデータベース システムのパフォーマンス特性に応じて、どちらのアプローチがより適切な場合もあります。両方の方法をテストして、特定のシナリオに最適なソリューションを決定することをお勧めします。
以上が指定された 3 つのロール ID をすべて持つユーザーを効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。