Pudiera darse el caso de que encuentres algún error en tu código o trabajo, recuerda probar siempre en un entorno de testing antes añadir el código al trabajo final.
Solución:
La primera declaración en UNION devuelve cuatro columnas:
SELECT b.id AS id,
b.pid AS pid,
b.message AS message,
b.date AS date
FROM wall_posts AS b
el segundo vuelve seisporque el * se expande para incluir todas las columnas de WALL_POSTS
:
SELECT b.id,
b.date,
b.privacy,
b.pid.
b.uid message
FROM wall_posts AS b
los UNION
y UNION ALL
los operadores requieren que:
- Existe el mismo número de columnas en todas las declaraciones que componen la consulta de UNION.
- Los tipos de datos tienen que coincidir en cada posición/columna
Usar:
FROM ((SELECT b.id AS id,
b.pid AS pid,
b.message AS message,
b.date AS date
FROM wall_posts AS b
JOIN Friends AS f ON f.id = b.pid
WHERE f.buddy_id = '1' AND f.status = 'b'
ORDER BY date DESC
LIMIT 0, 10)
UNION
(SELECT id,
pid,
message,
date
FROM wall_posts
WHERE pid = '1'
ORDER BY date DESC
LIMIT 0, 10))
estas tomando el UNION
de una relación de 4 columnas (id
, pid
, message
y date
) con una relación de 6 columnas (*
= las 6 columnas de wall_posts
). SQL no te permite hacer eso.
(
SELECT b.id AS id, b.pid AS pid, b.message AS message, b.date AS date FROM
wall_posts AS b
JOIN Friends AS f ON f.id = b.pid
WHERE f.buddy_id = '1' AND f.status = 'b'
ORDER BY date DESC
LIMIT 0, 10
)
UNION
(
SELECT id, pid , message , date
FROM
wall_posts
WHERE pid = '1'
ORDER BY date DESC
LIMIT 0, 10
)
Estabas seleccionando 4 en la primera consulta y 6 en la segunda, así que únelos.
Aquí puedes ver las reseñas y valoraciones de los usuarios
Si aceptas, puedes dejar un enunciado acerca de qué te ha parecido esta crónica.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)