| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2007 11:08:15
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Olá pessoALL!
Estou com um problema para usar order by junto com union all. O problema ocorre em um union de diversos selects, e cada select é bem complexo, mas pra facilitar eu reproduzi o erro num select pequeno e mais simples. Vejam o que acontece.
Qdo rodo apenas o select1, ele lista tdo que eu quero certinho e ordenado como eu estou pedindo, ou seja, pela coluna descrição.
Select1:
Então eu pego esse select1 e faço um UNION ALL com um select2. Abaixo como ficou:
Quando executo, os valores estão corretos, mas ele desordena tudo! Minha intenção era que ele saísse os registros do select1 ordenados por descrição e depois, no final de tudo, o único registro do select2.
O que acontece é que ele lista realmente os registros do select1 e depois de tudo os registros do select2. Só que no select1 ele ordena tudo pela primeira coluna (coluna código) e não pelo que eu estou mandando.
Alguém pode me dizer pq ele sempre ordena pela primeira coluna?
Por favor!!! Lembrem-se de que esse é um exemplo pequeno que eu fiz para que entendam o problema, não adianta me responder: "Coloque a descrição como sendo a primeira coluna e tudo estará resolvido", ok?
Conto com a ajuda de vcs!!!
Grata,
Renata
|
[]'s, Renata |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2010 14:15:11
|
ClaytonDias
Smalltalk
![[Avatar]](/images/avatar/54e739fff8793e3c8ed72e0ad355e352.jpg)
Membro desde: 06/10/2009 10:27:16
Mensagens: 4
Offline
|
RenataFA wrote:Olá pessoALL!
Estou com um problema para usar order by junto com union all. O problema ocorre em um union de diversos selects, e cada select é bem complexo, mas pra facilitar eu reproduzi o erro num select pequeno e mais simples. Vejam o que acontece.
Qdo rodo apenas o select1, ele lista tdo que eu quero certinho e ordenado como eu estou pedindo, ou seja, pela coluna descrição.
Select1:
Então eu pego esse select1 e faço um UNION ALL com um select2. Abaixo como ficou:
Quando executo, os valores estão corretos, mas ele desordena tudo! Minha intenção era que ele saísse os registros do select1 ordenados por descrição e depois, no final de tudo, o único registro do select2.
O que acontece é que ele lista realmente os registros do select1 e depois de tudo os registros do select2. Só que no select1 ele ordena tudo pela primeira coluna (coluna código) e não pelo que eu estou mandando.
Alguém pode me dizer pq ele sempre ordena pela primeira coluna?
Por favor!!! Lembrem-se de que esse é um exemplo pequeno que eu fiz para que entendam o problema, não adianta me responder: "Coloque a descrição como sendo a primeira coluna e tudo estará resolvido", ok?
Conto com a ajuda de vcs!!!
Grata,
Renata
Então Renata, não sei se chegou a resolver, ja faz tanto tempo, estava agora com o mesmo problema, não achei uma solução bacana para o mesmo, no entanto acabei inserindo no meu select uma coluna extra, assim:
(Select nome, 'a' from tabela)
union
(Select nome, 'b' from tabela)
order by a, nome
Assim primeiramente ele ordena os selects e depois o nome, se tiver uma solução mais inteligente, posta ai pois ainda estou procurando uma melhor.
|
Clayton Dias |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2010 14:51:47
|
bobmoe
GUJ Ranger
![[Avatar]](/images/avatar/9cc25407f209e031babdac7d3c520ccb.jpg)
Membro desde: 11/07/2006 20:45:48
Mensagens: 806
Localização: Sampa
Offline
|
RenataFA wrote:
Quando executo, os valores estão corretos, mas ele desordena tudo! Minha intenção era que ele saísse os registros do select1 ordenados por descrição e depois, no final de tudo, o único registro do select2.
vc pode colocar o order by do primeiro select direto na consulta do union:
|
BOB - Roberto Nogueira - bobmoe.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2010 14:58:55
|
ClaytonDias
Smalltalk
![[Avatar]](/images/avatar/54e739fff8793e3c8ed72e0ad355e352.jpg)
Membro desde: 06/10/2009 10:27:16
Mensagens: 4
Offline
|
vc pode colocar o order by do primeiro select direto na consulta do union:
Até tentei fazer desta forma, só que ele junta os dois selects em uma tabela só e depois ordena, isto faz com que não fique distinto os selects.
|
Clayton Dias |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2010 18:00:59
|
romuloberri
Smalltalk
Membro desde: 25/08/2010 17:54:46
Mensagens: 1
Offline
|
Este é um bug do MySQL que consta na base de bugs do MySQL desde 5 de dezembro de 2005 e foi considerado como um "recurso" do MySQL e não foi corrigido.
um possível workaround, é incluir no final de cada um dos Selects internos um limit com um número "infinito".
Ex:
Mais informações na página do bug do MySQL:
http://bugs.mysql.com/bug.php?id=15751
|
|
|
 |
|
|
|
|