MySQL-Fehler „Operand sollte 1 Spalte enthalten“ in NOT IN-Unterabfragen: Eine Lösung
MySQLs NOT IN
-Klausel erfordert, dass die Unterabfrage eine einzelne Spalte zurückgibt. Die folgende Abfrage generiert den Fehler „Operand sollte 1 Spalte enthalten“, da die Unterabfrage mehrere Spalten zurückgibt:
<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>
Das Problem liegt in der Auswahl mehrerer Felder (z. B. e.id_campaign
, d.name
, d.frequency
usw.) innerhalb der Unterabfrage. NOT IN
erwartet eine einzelne Spalte zum Vergleich.
Die Lösung: Verwendung einer abgeleiteten Tabelle
Um dies zu korrigieren, können wir eine abgeleitete Tabelle (eine Unterabfrage in der FROM
-Klausel) verwenden, um die relevante Spalte zu isolieren:
<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>
Diese überarbeitete Abfrage verwendet eine abgeleitete Tabelle mit dem Namen subquery
. Diese innere Abfrage führt die ursprüngliche Logik aus, wählt jedoch nur e.id_campaign
(alias id_campaign
) aus, um sicherzustellen, dass die äußere NOT IN
-Klausel eine einspaltige Ergebnismenge erhält, wodurch der Fehler behoben wird. Die ursprüngliche Filterlogik basierend auf frequency
und countcap
bleibt in der abgeleiteten Tabelle erhalten.
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Operand sollte 1 Spalte enthalten' in der NOT IN-Unterabfrage von MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!