Maison >base de données >tutoriel mysql >Comment trouver efficacement des utilisateurs avec les trois ID de rôle spécifiés ?
Sélectionnez des valeurs sur les lignes qui répondent à des conditions uniques
Cette question décrit un scénario dans lequel nous avons un tableau avec deux colonnes : userid et roleid. L'objectif est de récupérer un identifiant utilisateur unique contenant les trois identifiants de rôle spécifiés.
Une solution consiste à combiner l'agrégation et le filtrage :
<code class="language-sql">SELECT userid FROM userrole WHERE roleid IN (1, 2, 3) GROUP BY userid HAVING COUNT(1) = 3</code>
Cette requête regroupe les résultats par ID utilisateur, en comptant les occurrences de chaque ID de rôle pour chaque ID d'utilisateur. La clause HAVING garantit que seuls les ID utilisateur avec trois ID de rôle différents sont sélectionnés.
Cependant, une autre approche utilisant les jointures peut être plus efficace, en particulier lorsque vous travaillez avec de grands ensembles de données :
<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>
Cette requête utilise des jointures imbriquées pour sélectionner les ID utilisateur en fonction de l'ID de rôle spécifié. La condition de jointure externe vérifie la présence de chaque ID de rôle pour chaque ID d'utilisateur, et la condition AND finale garantit que l'ID d'utilisateur sélectionné possède les trois ID de rôle spécifiés.
En fonction de la distribution des données et des caractéristiques de performances du système de base de données sous-jacent, l'une ou l'autre approche peut être plus appropriée. Il est recommandé de tester les deux méthodes pour déterminer la meilleure solution pour votre scénario spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!