Maison >base de données >tutoriel mysql >Comment trouver efficacement des utilisateurs avec les trois ID de rôle spécifiés ?

Comment trouver efficacement des utilisateurs avec les trois ID de rôle spécifiés ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-19 17:02:081001parcourir

How to Efficiently Find Users with All Three Specified Role IDs?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn