Heim >Datenbank >MySQL-Tutorial >Wie behebe ich „Fehler: Die verwendeten SELECT-Anweisungen haben eine unterschiedliche Anzahl von Spalten' in UNION-Operationen?
Fehler: Diskrepanzen in der Spaltenanzahl in SELECT-Anweisungen
Beim Ausführen einer Abfrage mit mehreren SELECT-Anweisungen, z. B. einer UNION-Operation, ist dies unbedingt erforderlich um sicherzustellen, dass jede Anweisung genau die gleiche Anzahl von Spalten enthält. Andernfalls wird der Fehler „Fehler: Die verwendeten SELECT-Anweisungen haben eine unterschiedliche Anzahl von Spalten“ angezeigt.
Um dieses Problem zu beheben, muss die Abfrage so umgeschrieben werden, dass jede SELECT-Klausel eine identische Anzahl hat von Spalten mit kompatiblen Datentypen. Beispielsweise weist die bereitgestellte 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 < 1) ORDER BY RAND() LIMIT 6;
diesen Fehler auf, da das erste SELECT 4 Spalten enthält („“, u1., u2.*), während das zweite SELECT nur 4 Spalten enthält gibt eine einzelne Spalte („fid2“) zurück.
Eine einfachere Umschreibung, die die beabsichtigte Funktionalität beibehält, ist:
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 < 1 ORDER BY RAND() LIMIT 6;
Indem sichergestellt wird, dass beide SELECT-Anweisungen die gleiche Anzahl von Spalten mit Übereinstimmung zurückgeben Bei Datentypen kann die Abfrage ausgeführt werden, ohne dass der Spaltenanzahlfehler auftritt. Darüber hinaus werden unnötige äußere Verknüpfungen eliminiert, die basierend auf dem bereitgestellten Schema überflüssig erscheinen.
Das obige ist der detaillierte Inhalt vonWie behebe ich „Fehler: Die verwendeten SELECT-Anweisungen haben eine unterschiedliche Anzahl von Spalten' in UNION-Operationen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!