La requête MySQL NOT IN a échoué : l'opérande doit contenir 1 colonne
Lorsque vous rencontrez l'erreur « l'opérande doit contenir 1 colonne » dans une requête MySQL NOT IN, il est crucial d'en comprendre la cause première.
Cette erreur se produit car l'opérande de la condition NOT IN contient plusieurs colonnes :
<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 </code>
L'opérateur NOT IN nécessite que son opérande soit une seule colonne, tandis que la sous-requête renvoie des lignes contenant plusieurs colonnes.
Solution :
Une façon de résoudre cette erreur consiste à extraire les colonnes nécessaires de la sous-requête et à les comparer avec la colonne id de la requête externe :
<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>
Garantit une utilisation correcte de l'opérateur id_campaign
en limitant les résultats de la sous-requête à une seule colonne NOT IN
. De plus, nous avons ajouté un alias as subquery
pour la sous-requête, ce qui est nécessaire dans certaines versions de MySQL. Cela améliore la clarté et la lisibilité des requêtes.
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!