Heim > Datenbank > MySQL-Tutorial > Warum gibt meine MySQL-Unterabfrage „NOT IN' mit mehreren Spalten „Operand sollte 1 Spalte enthalten' zurück?

Warum gibt meine MySQL-Unterabfrage „NOT IN' mit mehreren Spalten „Operand sollte 1 Spalte enthalten' zurück?

Susan Sarandon
Freigeben: 2025-01-12 09:48:43
Original
817 Leute haben es durchsucht

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

MySQL NOT IN Fehler „Vorgang sollte 1 Spalte enthalten“, verursacht durch mehrere Spalten in der Unterabfrage

Es kommt häufig vor, dass der Fehler „Operand sollte 1 Spalte enthalten“ auftritt, wenn die NOT IN-Klausel einer Unterabfrage verwendet wird, die mehrere Spalten enthält. Dieser Fehler entsteht durch die Einschränkung, dass die NOT IN-Klausel erwartet, dass die Unterabfrage nur eine einzige Spalte zurückgibt.

In der bereitgestellten 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 < d.frequency
)</code>
Nach dem Login kopieren

Die Unterabfrage gibt acht Spalten zurück (id_campaign, Name, Häufigkeit, Land, Empfehlung, Gebot, Status und Countcap). Allerdings erfordert die NOT IN-Klausel eine einzelne Spalte zum Vergleich.

Lösung:

Um diesen Fehler zu beheben, müssen wir die Unterabfrage so ändern, dass sie nur die Spalte id_campaign zurückgibt. Dies ist die Spalte, die wir auf Nichtmitgliedschaft in der Hauptabfrage überprüfen möchten:

<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>
Nach dem Login kopieren

Durch die Beschränkung der Unterabfrageergebnisse auf eine einzelne Spalte id_campaign beseitigen wir den Fehler „Operand sollte 1 Spalte enthalten“ und stellen sicher, dass die NOT IN-Klausel den Vergleich korrekt durchführt. Beachten Sie, dass wir einen Alias ​​subquery hinzugefügt haben, um die Abfrage klarer zu organisieren. Diese geänderte Abfrage gibt nur Zeilen in der Tabelle campaigns zurück, in denen id nicht in den Ergebnissen der Unterabfrage enthalten ist.

Das obige ist der detaillierte Inhalt vonWarum gibt meine MySQL-Unterabfrage „NOT IN' mit mehreren Spalten „Operand sollte 1 Spalte enthalten' zurück?. 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