Maison > base de données > tutoriel mysql > Pourquoi ma sous-requête MySQL « NOT IN » avec plusieurs colonnes renvoie-t-elle « L'opérande devrait contenir 1 colonne » ?

Pourquoi ma sous-requête MySQL « NOT IN » avec plusieurs colonnes renvoie-t-elle « L'opérande devrait contenir 1 colonne » ?

Susan Sarandon
Libérer: 2025-01-12 09:48:43
original
819 Les gens l'ont consulté

Why Does My MySQL `NOT IN` Subquery with Multiple Columns Return

MySQL NOT IN Erreur "L'opération doit contenir 1 colonne" provoquée par plusieurs colonnes dans la sous-requête

Il est courant de rencontrer l'erreur « l'opérande doit contenir 1 colonne » lors de l'utilisation de la clause NOT IN d'une sous-requête contenant plusieurs colonnes. Cette erreur provient de la restriction selon laquelle la clause NOT IN s'attend à ce que la sous-requête ne renvoie qu'une seule colonne.

Dans la requête fournie :

<code class="language-sql">SELECT * from campaigns WHERE id not in
(
    SELECT 
        e.id_campaign, d.name, d.frequency, d.country, d.referral, d.bid, d.status, COUNT(e.id) AS countcap  
    FROM campaigns d
    LEFT JOIN served e
    ON d.id = e.id_campaign 
    WHERE 
        d.status = 'Active'
    GROUP BY e.id_campaign
    HAVING
        countcap < d.frequency
)</code>
Copier après la connexion

La sous-requête renvoie huit colonnes (id_campaign, nom, fréquence, pays, référence, offre, statut et nombre). Cependant, la clause NOT IN nécessite une seule colonne pour la comparaison.

Solution :

Pour corriger cette erreur, nous devons modifier la sous-requête afin qu'elle ne renvoie que la colonne id_campaign, qui est la colonne dont nous voulons vérifier la non-appartenance à la requête principale :

<code class="language-sql">SELECT *
FROM campaigns 
WHERE id NOT IN (
    SELECT id_campaign
    FROM (
        SELECT e.id_campaign AS id_campaign, d.frequency, e.id
        FROM campaigns d
        LEFT JOIN served e ON d.id = e.id_campaign
        WHERE d.status = 'Active'
        GROUP BY e.id_campaign
        HAVING COUNT(e.id) < d.frequency
    ) AS subquery
);</code>
Copier après la connexion

En limitant les résultats de la sous-requête à une seule colonne id_campaign, nous éliminons l'erreur « l'opérande doit contenir 1 colonne » et garantissons que la clause NOT IN effectue correctement la comparaison. Notez que nous avons ajouté un alias subquery pour organiser la requête plus clairement. Cette requête modifiée ne renverra que les lignes de la table campaignsid ne figure pas dans les résultats de la sous-requête.

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