"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo resolver el error \"Recuentos de columnas dispares en declaraciones seleccionadas\" al utilizar UNION?

¿Cómo resolver el error \"Recuentos de columnas dispares en declaraciones seleccionadas\" al utilizar UNION?

Publicado el 2024-11-07
Navegar:281

How to Resolve the \

Error: recuentos de columnas dispares en declaraciones seleccionadas

Al ejecutar una consulta que utiliza el operador UNION, es imperativo asegurarse de que todas las declaraciones SELECT individuales involucradas cumplan con dos criterios fundamentales:

  1. Recuento de columnas coincidentes: Cada instrucción SELECT debe producir el mismo número de columnas en el conjunto de resultados recuperado.
  2. Datos consistentes Tipos: Los tipos de datos de las columnas correspondientes en diferentes declaraciones SELECT deben alinearse.

Análisis de problemas

Considerando la consulta proporcionada:

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 

el mensaje de error indica una discrepancia en el recuento de columnas entre las dos declaraciones SELECT unidas por UNION. Específicamente, la primera instrucción SELECT devuelve todas las columnas de las tablas involucradas, mientras que la segunda recupera solo la columna fid2.

Solución

Para resolver este problema, la segunda instrucción SELECT debe modificarse para coincide con el recuento de columnas de la primera declaración. El enfoque más sencillo es incluir todas las columnas deseadas explícitamente:

   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 

Como alternativa, se podría utilizar el operador UNION ALL, que permite declaraciones SELECT con diferentes recuentos de columnas. Sin embargo, las columnas que no coinciden se completarán con valores NULL, lo que puede no ser deseable en todos los casos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3