Heim > Datenbank > MySQL-Tutorial > Warum führt meine MySQL-Abfrage „NOT IN' mit „COUNT()' zu einem Fehler „Operand sollte 1 Spalte enthalten'?

Warum führt meine MySQL-Abfrage „NOT IN' mit „COUNT()' zu einem Fehler „Operand sollte 1 Spalte enthalten'?

Susan Sarandon
Freigeben: 2025-01-12 06:43:44
Original
495 Leute haben es durchsucht

Why Does My MySQL `NOT IN` Query with `COUNT()` Result in an

MySQL-Fehler „Operand sollte 1 Spalte enthalten“ in NOT INUnterabfragen mit Aggregatfunktionen

Die Verwendung von NOT IN-Unterabfragen in MySQL erfordert sorgfältige Beachtung der Spaltenanzahl. Ein häufiger Fehler, „Operand sollte 1 Spalte enthalten“, tritt auf, wenn die Unterabfrage Aggregatfunktionen wie COUNT() verwendet und mehrere Spalten zurückgibt. Der NOT IN-Operator von MySQL erwartet einen einspaltigen Vergleich.

Grundursache:

Der Fehler ist auf eine Diskrepanz zwischen der Anzahl der von der Hauptabfrage und der Unterabfrage zurückgegebenen Spalten zurückzuführen. Die NOT IN-Unterabfrage, die eine Aggregatfunktion enthält, erzeugt eine Ergebnismenge mit mehr als einer Spalte, was zu einem Konflikt mit der einspaltigen id in der WHERE-Klausel der Hauptabfrage führt.

Anschauliches Beispiel:

Bedenken Sie diese problematische Abfrage:

<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 < p>The intention is to select campaigns *not* included in the subquery's results. The subquery, however, returns eight columns, causing the "Operand should contain 1 column" error because `NOT IN` expects a single-column comparison against the `id` column in the `campaigns` table.</p><p>**Resolution:**</p><p>The solution involves restructuring the subquery to return only the `id_campaign` column:</p><pre class="brush:php;toolbar:false"><code class="language-sql">SELECT *
FROM campaigns
WHERE id NOT IN
(
    SELECT e.id_campaign
    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) < 
</code>

Alternatively, for situations requiring multiple columns, use `EXISTS` or `NOT EXISTS` for a more efficient and accurate solution:

<code class="language-sql">SELECT *
FROM campaigns c
WHERE NOT EXISTS
(
    SELECT 1
    FROM campaigns d
    INNER JOIN served e ON d.id = e.id_campaign
    WHERE d.id = c.id
      AND d.status = 'Active'
      AND COUNT(e.id) < 
</code>

This revised approach avoids the column count mismatch and provides a cleaner solution for scenarios involving aggregate functions within subqueries used with `NOT IN`.

Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum führt meine MySQL-Abfrage „NOT IN' mit „COUNT()' zu einem Fehler „Operand sollte 1 Spalte enthalten'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage