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:
Unter Berücksichtigung der bereitgestellten Abfrage:
<code class="sql">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;
die 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.
Um dieses Problem zu beheben, sollte die zweite SELECT-Anweisung in geändert werden Entspricht der Spaltenanzahl der ersten Anweisung. Der einfachste Ansatz besteht darin, alle gewünschten Spalten explizit einzuschließen:
<code class="sql"> 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;</code>
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.
Das obige ist der detaillierte Inhalt vonWie kann der Fehler „Unterschiedliche Spaltenanzahl in Select-Anweisungen' bei Verwendung von UNION behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!