Maison >base de données >tutoriel mysql >Comment résoudre « Erreur : les instructions SELECT utilisées ont un nombre de colonnes différent » dans les opérations UNION ?

Comment résoudre « Erreur : les instructions SELECT utilisées ont un nombre de colonnes différent » dans les opérations UNION ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 12:02:26292parcourir

How to Resolve

Erreur : écarts dans le nombre de colonnes dans les instructions SELECT

Lors de l'exécution d'une requête impliquant plusieurs instructions SELECT, comme une opération UNION, il est impératif pour garantir que chaque instruction contient exactement le même nombre de colonnes. Si vous ne le faites pas, l'erreur « Erreur : les instructions SELECT utilisées ont un nombre différent de colonnes ».

Pour résoudre ce problème, la requête doit être réécrite de telle sorte que chaque clause SELECT ait un numéro identique. de colonnes avec des types de données compatibles. Par exemple, 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 < 1)
ORDER BY RAND()
LIMIT 6;

souffre de cette erreur car le premier SELECT contient 4 colonnes ("", u1., u2.*), tandis que le second SELECT uniquement renvoie une seule colonne ("fid2").

Une réécriture plus simple qui préserve la fonctionnalité prévue est :

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;

En garantissant que les deux instructions SELECT renvoient le même nombre de colonnes avec des correspondances types de données, la requête peut être exécutée sans rencontrer l’erreur de nombre de colonnes. De plus, il élimine les jointures externes inutiles, qui semblent redondantes d'après le schéma fourni.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn