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