Fehler: Ungleichheit in der Spaltenanzahl zwischen UNIONed SELECT-Anweisungen
In der bereitgestellten Abfrage stoßen Sie auf den Fehler: „FEHLER 1222 (21000)“ : Die verwendeten SELECT-Anweisungen haben eine unterschiedliche Anzahl von Spalten.“ Dieser Fehler tritt auf, wenn die SELECT-Anweisungen in einer UNION-Anweisung ungleiche Spaltenanzahlen zurückgeben.
In Ihrer Abfrage gibt die erste SELECT-Anweisung:
SELECT * FROM friends LEFT JOIN users AS u1 ON users.uid = friends.fid1 LEFT JOIN users AS u2 ON users.uid = friends.fid2 WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
drei Spalten zurück: friends.fid1 , friends.fid2 und Spalten aus den Tabellen der verbundenen Benutzer (u1 und u2). Allerdings gibt die zweite SELECT-Anweisung:
SELECT fid2 FROM friends WHERE (friends.fid2 = 1) AND (friends.fid1 < 1)
nur eine einzige Spalte zurück: friends.fid2.
UNION-Anforderungen für die Spaltenübereinstimmung
Damit eine UNION-Operation erfolgreich ist, müssen alle kombinierten SELECT-Anweisungen die folgenden Anforderungen erfüllen:
Lösung
Um diesen Fehler zu beheben, müssen Sie sicherstellen, dass alle SELECT-Anweisungen in Ihrer UNION-Operation die gleiche Anzahl von Spalten mit übereinstimmenden Datentypen zurückgeben. Sie können Ihre Abfrage beispielsweise wie folgt umschreiben:
SELECT friends.*, u.* FROM friends JOIN users AS u ON u.uid = friends.fid2 WHERE friends.fid1 = 1 AND friends.fid2 > 1 UNION SELECT friends.*, u.* FROM friends JOIN users AS u ON u.uid = friends.fid1 WHERE friends.fid2 = 1 AND friends.fid1 < 1 ORDER BY RAND() LIMIT 6;
In dieser überarbeiteten Abfrage geben beide SELECT-Anweisungen die gleiche Anzahl von Spalten (fünf) mit übereinstimmenden Datentypen zurück, wodurch der Fehler behoben wird.
Das obige ist der detaillierte Inhalt vonWie kann „FEHLER 1222 (21000): Die verwendeten SELECT-Anweisungen haben eine unterschiedliche Anzahl von Spalten“ in UNION-Anweisungen behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!