Maison >base de données >tutoriel mysql >Comment corriger l'erreur « L'opérande doit contenir 1 colonne » dans la sous-requête NOT IN de MySQL ?

Comment corriger l'erreur « L'opérande doit contenir 1 colonne » dans la sous-requête NOT IN de MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-12 07:13:46467parcourir

How to Fix the

Erreur MySQL « L'opérande doit contenir 1 colonne » dans les sous-requêtes NOT IN : une solution

La clause NOT IN de MySQL exige que la sous-requête renvoie une seule colonne. La requête suivante génère l'erreur « L'opérande doit contenir 1 colonne » car la sous-requête renvoie 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  
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>

Le problème réside dans la sélection de plusieurs champs (par exemple, e.id_campaign, d.name, d.frequency, etc.) dans la sous-requête. NOT IN attend une seule colonne pour la comparaison.

La solution : utiliser une table dérivée

Pour corriger cela, nous pouvons utiliser une table dérivée (une sous-requête dans la clause FROM) pour isoler la colonne pertinente :

<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>

Cette requête révisée utilise une table dérivée nommée subquery. Cette requête interne exécute la logique d'origine, mais sélectionne uniquement e.id_campaign (alias id_campaign), garantissant que la clause externe NOT IN reçoit un jeu de résultats à une seule colonne, résolvant ainsi l'erreur. La logique de filtrage d'origine basée sur frequency et countcap est conservée dans la table dérivée.

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!

Déclaration:
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