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