"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment résoudre l'erreur « Nombre de colonnes disparates dans les instructions Select » lors de l'utilisation de UNION ?

Comment résoudre l'erreur « Nombre de colonnes disparates dans les instructions Select » lors de l'utilisation de UNION ?

Publié le 2024-11-07
Parcourir:112

How to Resolve the \

Erreur : nombre de colonnes disparates dans les instructions Select

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 :

  1. Nombre de colonnes correspondantes : Chaque instruction SELECT doit générer le même nombre de colonnes dans l'ensemble de résultats récupéré.
  2. Données cohérentes Types : Les types de données des colonnes correspondantes dans les différentes instructions SELECT doivent s'aligner.

Analyse du problème

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.

Dernier tutoriel Plus>

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