Maison > base de données > tutoriel mysql > Comment sélectionner des enregistrements correspondant à plusieurs critères sur la même colonne en SQL ?

Comment sélectionner des enregistrements correspondant à plusieurs critères sur la même colonne en SQL ?

Barbara Streisand
Libérer: 2025-01-21 16:11:10
original
945 Les gens l'ont consulté

How to Select Records Matching Multiple Criteria on the Same Column in SQL?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal