Heim  >  Artikel  >  Datenbank  >  Wie kann „FEHLER 1222 (21000): Die verwendeten SELECT-Anweisungen haben eine unterschiedliche Anzahl von Spalten“ in UNION-Anweisungen behoben werden?

Wie kann „FEHLER 1222 (21000): Die verwendeten SELECT-Anweisungen haben eine unterschiedliche Anzahl von Spalten“ in UNION-Anweisungen behoben werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 21:47:30377Durchsuche

How to Fix

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:

  • Übereinstimmende Spaltenanzahl: Jede SELECT-Anweisung muss Folgendes zurückgeben gleiche Anzahl von Spalten.
  • Übereinstimmende Spaltendatentypen: Die Datentypen der Spalten an jeder Position in der SELECT-Klausel müssen übereinstimmen.

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!

Stellungnahme:
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