sql - sindicato - propuestas sindicales para promover
Cómo hacer un pedido con un sindicato (6)
¿Es posible ordenar cuando los datos provienen de muchos seleccionarlos y unirlos entre sí? Tal como
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
¿Cómo puedo ordenar esta consulta por nombre?
Algunos dijeron que puedes hacer una consulta como esta.
Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name
Pero en este caso simplemente ignoro esa solución.
Gracias de antemano.
Ambas otras respuestas son correctas, pero pensé que valía la pena señalar que el lugar donde me quedé atrapado no se daba cuenta de que necesitarías el orden por el alias y te aseguraste de que el alias sea el mismo para las selecciones ... entonces
select ''foo''
union
select item as `foo`
from myTable
order by `foo`
Fíjese que estoy usando comillas simples en la primera selección, pero con barras invertidas para las demás.
Eso te dará la clasificación que necesitas.
Para que la clasificación se aplique solo a la primera declaración en la UNIÓN, puede ponerla en una subselección con UNION ALL (ambas parecen ser necesarias en Oracle):
Select id,name,age FROM
(
Select id,name,age
From Student
Where age < 15
Order by name
)
UNION ALL
Select id,name,age
From Student
Where Name like "%a%"
O (respondiendo al comentario de Nicholas Carey) puede garantizar que el SELECT superior esté ordenado y que los resultados aparezcan en la parte inferior SELECCIONAR de la siguiente manera:
Select id,name,age, 1 as rowOrder
From Student
Where age < 15
UNION
Select id,name,age, 2 as rowOrder
From Student
Where Name like "%a%"
Order by rowOrder, name
Si quiero que la clasificación se aplique solo a uno de los UNION si uso Union all:
Select id,name,age
From Student
Where age < 15
Union all
Select id,name,age
From
(
Select id,name,age
From Student
Where Name like "%a%"
Order by name
)
Solo escribe
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Order by name
el orden por se aplica al conjunto de resultados completo
Order By
se aplica después de la union
, de modo que solo agregue una cláusula order by
al final de las instrucciones:
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like ''%a%''
Order By name
Select id,name,age
from
(
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
) results
order by name