Maison  >  Article  >  base de données  >  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 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 19:52:30359parcourir

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 :

<code class="sql">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;

le 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 en correspondre au nombre de colonnes de la première instruction. L'approche la plus simple consiste à inclure explicitement toutes les colonnes souhaitées :

<code class="sql">   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;</code>

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 peut-être pas souhaitable dans tous les cas.

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