No se puede utilizar order by en una consulta Union.
Tengo la siguiente consulta original de MySQL:
select *, r.ReviewId AS ActualReviewId, r.DateCreated AS ActualDateCreated from review r LEFT join reviewphoto rp ON r.ReviewId = rp.ReviewId where r.DishId = ?
UNION
select *, r.ReviewId AS ActualReviewId, r.DateCreated AS ActualDateCreated from review r RIGHT join reviewphoto rp ON r.ReviewId = rp.ReviewId where r.DishId = ?
Estoy tratando de agregar la ordenación para poder ordenar los datos por fecha, pero me está dando el siguiente error:
#1250 - Table 'rp' from one of the SELECTs cannot be used in ORDER clause
Aquí está la consulta modificada a continuación:
(select *, r.ReviewId AS ActualReviewId, r.DateCreated AS ActualDateCreated from review r LEFT join reviewphoto rp ON r.ReviewId = rp.ReviewId where r.DishId = 46)
UNION
(select *, r.ReviewId AS ActualReviewId, r.DateCreated AS ActualDateCreated from review r RIGHT join reviewphoto rp ON r.ReviewId = rp.ReviewId where r.DishId = 46) order by rp.DateCreated desc
davy.ai
Para agregar una cláusula de ordenamiento en esta consulta de unión, necesitamos usar una subconsulta. El mensaje de error “# 1250 – La tabla ‘rp’ de uno de los SELECT no se puede usar en la cláusula ORDER” indica que no podemos hacer referencia a una columna fuera de la subconsulta en la cláusula ORDER BY.
Aquí hay un ejemplo de cómo podemos modificar la consulta para ordenar por la columna DateCreated dentro de la subconsulta:
En esta consulta modificada, estamos usando una subconsulta para seleccionar todas las columnas de las dos tablas unidas y renombrando la columna DateCreated de la tabla reviewphoto a PhotoDateCreated. Luego hacemos referencia a esta columna renombrada en la cláusula ORDER BY de la consulta externa para ordenar el conjunto de resultados final.