Maison >base de données >tutoriel mysql >Comment sélectionner efficacement des enregistrements correspondant à plusieurs conditions sur la même colonne dans SQL ?
Astuce de requête SQL multi-conditions pour les enregistrements dans la même colonne
Dans les requêtes SQL, filtrer les enregistrements en fonction de plusieurs conditions, notamment lorsque ces conditions s'appliquent à la même colonne, nécessite certaines compétences. Cet article explorera comment gérer efficacement cette situation.
Par exemple, un tableau associe des utilisateurs et des types de tags, et l'objectif est d'obtenir l'ID de contact qui correspond à la coche dans tous les formulaires de recherche. À première vue, la requête suivante semble intuitive :
<code class="language-sql">SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'...</code>
Cependant, il ne renvoie aucun résultat. Parce que l'opérateur AND nécessite que la même ligne remplisse deux conditions en même temps, et une telle ligne n'existe pas dans ce tableau.
Pour résoudre ce problème, une solution consiste à utiliser GROUP BY
et HAVING COUNT(*) = n
, où n est le nombre de marqueurs sélectionnés :
<code class="language-sql">SELECT contact_id FROM your_table WHERE flag IN ('Volunteer', 'Uploaded', ...) GROUP BY contact_id HAVING COUNT(*) = 2 -- // 必须与WHERE flag IN (...) 列表中的数量匹配</code>
Cette méthode vérifie si le contact_id apparaît n fois avec chacune des n balises contenues dans la clause WHERE
. Une autre façon est d'utiliser join :
<code class="language-sql">SELECT T1.contact_id FROM your_table T1 JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded' -- // 如有必要,可以添加更多连接 WHERE T1.flag = 'Volunteer'</code>
Ici, plusieurs jointures sont utilisées pour associer des lignes représentant le même contact_id aux balises requises.
La méthode à choisir dépend du nombre de balises à vérifier et du nombre d'enregistrements correspondants. GROUP BY
peut être plus rapide lorsqu'il s'agit d'un grand nombre de balises et d'un petit nombre de correspondances, tandis que la jointure peut mieux fonctionner lorsque le nombre de balises est petit et qu'il y a de nombreuses correspondances. Il est recommandé de tester les deux méthodes sur des données réelles pour obtenir les meilleures performances.
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!