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 » ?
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>
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>
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 campaigns
où id
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!