Sélectionner les enregistrements correspondant à plusieurs conditions sur la même colonne en SQL
Les requêtes SQL doivent parfois récupérer des enregistrements qui correspondent à plusieurs conditions sur la même colonne. Cependant, la simple utilisation de plusieurs clauses WHERE avec les mêmes colonnes ne produit pas toujours les résultats escomptés. Prenons l'exemple suivant :
Nous avons une table de base de données contenant des contacts et des drapeaux indiquant le statut de chaque contact. Le tableau contient les données suivantes :
ID | contactid | flag | flag_type |
---|---|---|---|
118 | 99 | Volunteer | 1 |
119 | 99 | Uploaded | 2 |
120 | 100 | Via Import | 3 |
121 | 100 | Volunteer | 1 |
122 | 100 | Uploaded | 2 |
L'objectif est de renvoyer uniquement les identifiants de contact qui correspondent à la fois aux conditions des indicateurs « Bénévole » et « Téléchargé ». Utilisez la requête suivante :
<code class="language-sql">SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'</code>
Aucun résultat ne sera renvoyé puisque chaque condition vérifie uniquement une valeur d'indicateur spécifique. Pour récupérer les données requises, nous devons utiliser une méthode alternative.
Utilisez GROUP BY et HAVING
Une solution consiste à utiliser les clauses GROUP BY et HAVING. La requête suivante regroupera les résultats par contactid et comptera le nombre de valeurs d'indicateur correspondantes :
<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>
Les contacts avec les drapeaux « Bénévole » et « Téléchargé » seront comptés pour 2. La clause HAVING filtre ensuite les résultats pour inclure uniquement ces contacts.
Utiliser la connexion
Une autre façon consiste à utiliser les connexions. La requête suivante effectuera une auto-jointure sur la table your_table :
<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>
Cette requête créera une table temporaire contenant la combinaison de tous les contacts qui ont à la fois les drapeaux "Bénévole" et "Téléchargé". La clause WHERE filtre ensuite les résultats pour inclure uniquement les contacts qui remplissent ces deux conditions.
Sélection de la méthode
La meilleure façon de sélectionner des enregistrements avec plusieurs conditions sur la même colonne dépend de la taille et de la structure de vos données. Pour les grands ensembles de données avec de longues listes de critères de correspondance, les solutions GROUP BY et HAVING peuvent être plus efficaces. Pour les petits ensembles de données avec une liste plus courte de critères de correspondance, la solution JOIN peut être plus rapide.
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!