MySQL: order by + union all  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
RenataFA
Virtual Machine Man
[Avatar]

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
[Email]
ClaytonDias
Smalltalk
[Avatar]

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
[Email] [MSN]
bobmoe
GUJ Ranger
[Avatar]

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
[WWW] [MSN]
ClaytonDias
Smalltalk
[Avatar]

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
[Email] [MSN]
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
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team