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
Libérer: 2024-10-30 12:02:26
original
274 Les gens l'ont consulté

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal