É possível solicitar quando os dados são provenientes de muitos selecionar e uni-los? Tal como
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Como posso solicitar esta consulta pelo nome.
Alguns disseram que você pode consultar assim.
Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name
Mas, neste caso, simplesmente ignoro essa solução.
sql
sql-order-by
union
Guilgamos
fonte
fonte
Respostas:
Apenas escreva
a ordem de é aplicada ao conjunto de resultados completo
fonte
fonte
xxx UNION yyy ORDER BY zzz
o equivalente a(xxx UNION yyy) ORDER BY zzz
Para aplicar a classificação apenas à primeira declaração no UNION, você pode colocá-lo em uma subseleção com UNION ALL (ambos parecem ser necessários no Oracle):
Ou (abordando o comentário de Nicholas Carey), você pode garantir que o SELECT superior seja ordenado e os resultados apareçam acima do SELECT inferior da seguinte forma:
fonte
select
instrução que faz referência à subseleção. De acordo com o padrão SQL, a ordem dos resultados é indefinida, exceto umaorder by
cláusula explícita . O primeiroselect
no seu exemplo provavelmente retorna seus resultados na ordem retornada pela subseleção, mas não é garantido. Além disso, isso * não * garante a ordenação do conjunto de resultados do conjuntounion
(mesma regra na Norma). Se você estiver dependendo da ordem, será eventualmente mordido.SELECT
.Ambas as outras respostas estão corretas, mas achei interessante notar que o local em que fiquei preso não estava percebendo que você precisará da ordem do alias e verifique se o alias é o mesmo para os dois selecionados.
observe que estou usando aspas simples no primeiro select, mas backticks para os outros.
Isso lhe dará a classificação que você precisa.
fonte
SELECT a, b, c FROM (<insert union query here>) AS x;
caso realmente queira evitar retornar a coluna extra.Order By
é aplicado depoisunion
, basta adicionar umaorder by
cláusula no final das instruções:fonte
Se eu quiser que o tipo seja aplicado a apenas um da UNION, use Union all:
fonte
Como outras respostas declararam, 'Ordenar por' após ÚLTIMO Sindicato deve aplicar-se a ambos os conjuntos de dados unidos pelo sindicato.
Eu estava tendo dois conjuntos de dados, mas usando tabelas diferentes, mas as mesmas colunas. 'Order by' após a ÚLTIMA União ainda não funcionou. Usar o ALIAS para a coluna usada em 'classificar por' fez o truque.
Portanto, a solução é usar o alias 'User_Name':
fonte
Pode usar isso:
fonte