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:
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.
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