Maison >base de données >tutoriel mysql >Comment corriger \'ERREUR 1222 (21000) : les instructions SELECT utilisées ont un nombre différent de colonnes\' dans les instructions UNION ?

Comment corriger \'ERREUR 1222 (21000) : les instructions SELECT utilisées ont un nombre différent de colonnes\' dans les instructions UNION ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 21:47:30460parcourir

How to Fix

Erreur : Disparité dans le nombre de colonnes entre les instructions UNIONed SELECT

Dans la requête fournie, vous rencontrez l'erreur : "ERREUR 1222 (21000) : Les instructions SELECT utilisées ont un nombre de colonnes différent." Cette erreur se produit lorsque les instructions SELECT d'une instruction UNION renvoient un nombre de colonnes inégal.

Dans votre requête, la première instruction SELECT :

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)

renvoie trois colonnes : friends.fid1 , friends.fid2 et colonnes des tables des utilisateurs joints (u1 et u2). Cependant, la deuxième instruction SELECT :

SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1 < 1)

ne renvoie qu'une seule colonne : friends.fid2.

Exigences UNION pour la correspondance des colonnes

Pour qu'une opération UNION réussisse, toutes les instructions SELECT combinées doivent respecter ce qui suit exigences :

  • Nombre de colonnes correspondantes : Chaque instruction SELECT doit renvoyer le même nombre de colonnes.
  • Types de données de colonnes correspondantes : Le les types de données des colonnes à chaque position de la clause SELECT doivent match.

Résolution

Pour résoudre cette erreur, vous devez vous assurer que toutes les instructions SELECT de votre opération UNION renvoient le même nombre de colonnes avec des données correspondantes genres. Par exemple, vous pouvez réécrire votre requête comme :

SELECT friends.*, u.*
FROM friends
JOIN users AS u ON u.uid = friends.fid2
WHERE friends.fid1 = 1 AND friends.fid2 > 1
UNION
SELECT friends.*, u.*
FROM friends
JOIN users AS u ON u.uid = friends.fid1
WHERE friends.fid2 = 1 AND friends.fid1 < 1
ORDER BY RAND()
LIMIT 6;

Dans cette requête révisée, les deux instructions SELECT renvoient le même nombre de colonnes (cinq) avec des types de données correspondants, résolvant ainsi l'erreur.

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