Lors de l'exécution d'une requête qui utilise l'opérateur UNION, il est impératif de s'assurer que toutes les instructions SELECT individuelles impliquées respectent deux critères fondamentaux :
Considérant la requête fournie :
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 le message d'erreur indique une différence dans le nombre de colonnes entre les deux instructions SELECT jointes par UNION. Plus précisément, la première instruction SELECT renvoie toutes les colonnes des tables impliquées, tandis que la seconde récupère uniquement la colonne fid2.
Solution
Pour résoudre ce problème, la deuxième instruction SELECT doit être modifiée pour correspondre au nombre de colonnes de la première instruction. L'approche la plus simple consiste à inclure explicitement toutes les colonnes souhaitées :
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 Vous pouvez également utiliser l'opérateur UNION ALL, qui autorise les instructions SELECT avec un nombre de colonnes variable. Cependant, les colonnes qui ne correspondent pas seront remplies de valeurs NULL, ce qui n'est pas souhaitable dans tous les cas.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3