„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann der Fehler „Unterschiedliche Spaltenanzahl in Select-Anweisungen“ bei Verwendung von UNION behoben werden?

Wie kann der Fehler „Unterschiedliche Spaltenanzahl in Select-Anweisungen“ bei Verwendung von UNION behoben werden?

Veröffentlicht am 07.11.2024
Durchsuche:386

How to Resolve the \

Fehler: Unterschiedliche Spaltenanzahlen in SELECT-Anweisungen

Beim Ausführen einer Abfrage, die den UNION-Operator verwendet, muss unbedingt sichergestellt werden, dass alle einzelnen beteiligten SELECT-Anweisungen eingehalten werden zwei grundlegende Kriterien:

  1. Übereinstimmende Spaltenanzahl: Jede SELECT-Anweisung muss die gleiche Anzahl von Spalten in der abgerufenen Ergebnismenge liefern.
  2. Konsistente Daten Typen: Die Datentypen entsprechender Spalten in verschiedenen SELECT-Anweisungen sollten übereinstimmen.

Problemanalyse

Unter Berücksichtigung der bereitgestellten Abfrage:

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)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1 

Die Fehlermeldung weist auf eine Diskrepanz in der Spaltenanzahl zwischen den beiden durch UNION verbundenen SELECT-Anweisungen hin. Konkret gibt die erste SELECT-Anweisung alle Spalten aus den beteiligten Tabellen zurück, während die zweite nur die fid2-Spalte abruft.

Lösung

Um dieses Problem zu beheben, sollte die zweite SELECT-Anweisung geändert werden Entspricht der Spaltenanzahl der ersten Anweisung. Der einfachste Ansatz besteht darin, alle gewünschten Spalten explizit einzuschließen:

   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid2
    WHERE f.fid1 = 1 
      AND f.fid2 > 1
UNION 
   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid1
    WHERE f.fid2  = 1 
      AND f.fid1 

Alternativ könnte man den UNION ALL-Operator verwenden, der SELECT-Anweisungen mit unterschiedlicher Spaltenanzahl zulässt. Allerdings werden die nicht übereinstimmenden Spalten mit NULL-Werten gefüllt, was möglicherweise nicht in allen Fällen wünschenswert ist.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3