es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  ,

Answer

  1. Avatar for 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:

    SELECT *
    FROM (
       SELECT *, r.ReviewId AS ActualReviewId, r.DateCreated AS ActualDateCreated, rp.DateCreated AS PhotoDateCreated
       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, rp.DateCreated AS PhotoDateCreated
       FROM review r
       RIGHT JOIN reviewphoto rp ON r.ReviewId = rp.ReviewId
       WHERE r.DishId = ?
    ) subconsulta
    ORDER BY PhotoDateCreated DESC;
    

    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.

Comments are closed.