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.

Cómo usar ORDER BY con UNION en SQL con alias de columnas?

Aquí está mi solicitud de MYSQL muy simple:

(SELECT start, name, id, info FROM `table1`)
UNION
(SELECT end, name, id, info FROM `table1`)

Quiero ordenar el resultado por la primera columna y supuse que necesitaba usar alias:

(SELECT start as mydate, name, id, info FROM `table1`)
UNION
(SELECT end as mydate, name, id, info FROM `table1`)
ORDER BY mydate

Me sorprendió que MYSQL arrojara este error:

“Unknown column ‘mydate’ in ‘where clause'”

Terminé con esta mala práctica que funciona:

(SELECT start, name, id, info FROM table1)
UNION
(SELECT end, name, id, info FROM table1)
ORDER BY 1

fuente: https://www.mysqltutorial.org/sql-union-mysql.aspx

¡Pero me gustaría entender mi error!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Tu error se debió al hecho de que utilizaste el alias ‘mydate’ en la cláusula ‘ORDER BY’, pero no en la cláusula ‘SELECT’. Para poder usar el alias, debes envolverlo entre comillas invertidas de esta manera:

    (SELECT start as `mydate`, name, id, info FROM `table1`)
    UNION
    (SELECT end as `mydate`, name, id, info FROM `table1`)
    ORDER BY `mydate`
    

    Esto te permitirá ordenar por la columna alias sin errores. Ten en cuenta que usar el índice de columna en la cláusula ‘ORDER BY’ (ORDER BY 1) es un método frágil y se debe evitar siempre que sea posible, ya que depende de que las columnas estén en un orden específico.

Comments are closed.