Sql um pouco avançado - pelo menos pra mim [RESOLVIDO]  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
fernandoeick
JavaEvangelist

Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline

É possível eu fazer o seguinte:

1 - Tenho um método que realiza uma consulta no banco.
2 - Tenho um segundo método que realiza uma outra consulta no banco.
3 - Eu quero criar um terceiro método que pegue o resultado da consulta dos dois primeiros métodos, junte-os e mostre sem repetições.

Abaixo eu posto os métodos:

-> Neste primeiro, seleciono os itens da tabela produtos com o distinct, quando eles aparecem em alguma nota de entrada

-> Neste segundo, seleciono os itens da tabela produtos com o distinct, quando eles aparecem em alguma nota de saída


O que eu quero fazer, é pegar o primeiro sql, juntar com o segundo sql, e exibir todos os itens (codProd e nomeProd), sem repetições.

Alguém expert em SQL se dispõe a me ajudar? Ou alguém sugere uma outra forma para mim fazer isso? Tentei fazer tudo em um sql só, mas não ficou legal, creio que assim, ganho em performance. E cada sql, separado, já está testado e retornando o resultado que eu quero. Resta junta-los.

O que eu poderia retornar em cada um desses dois métodos, que eu conseguisse pegar no terceiro, e fazer esta separação que eu quero. Pensei em HashMap, mas não sei, por isso estou buscando ajuda.

Agradeço.

This message was edited 2 times. Last update was at 14/03/2008 14:03:17


Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5

E dá-lhe Grêmio!
[MSN]
nebal.metz
Thread.start()
[Avatar]

Membro desde: 26/09/2007 18:09:23
Mensagens: 36
Offline

Opa.
Como tu tentou juntar os dois sqls??
Com um union ou union all??
O que nao ficou legal quando voce tentou juntar os dois?

[MSN]
Guitar_Men
JavaEvangelist
[Avatar]

Membro desde: 21/02/2008 10:01:31
Mensagens: 463
Offline

Usa o union como disse o nebal, só que atente-se em dar os mesmos nomes aos alias dos campos, senão ja era....



[WWW] [MSN]
brunoha
Thread.start()
[Avatar]

Membro desde: 07/03/2008 15:59:24
Mensagens: 26
Localização: São Paulo
Offline

Já que você não quer repetições no Resultset, então você pode juntar as duas consultas, e utilizar o Union, ao invés de criar 2 métodos, e unir o Resultset de cada um em um terceiro método.

Aí, vc teria q colocar um campo a mais no Select, para vc distinguir qual registro eh nota de entrada, e qual registro eh nota de saída.
Por exemplo:

No segundo Select:


O código ficaria assim:


Qualquer dúvida, eh soh falar ae...

Bruno Heitzmann
[MSN]
brunoha
Thread.start()
[Avatar]

Membro desde: 07/03/2008 15:59:24
Mensagens: 26
Localização: São Paulo
Offline

Desculpa ae pelo "); tudo desordenado.

Bruno Heitzmann
[MSN]
fernandoeick
JavaEvangelist

Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline

Desculpem a demora, hora do almoço.

Realmente, eu não tentei com o operador UNION, mas agora somente fazendo as modificação propostas por você brunoha, executando direto no Postgree, obtenho o seguinte erro:

O SQL ficou assim:
Eu ainda não analisei e nem pesquisei para ver o porque do erro, mas se alguém quiser facilitar e já me responder eu agradeço.

O erro tá lá no inicio do segundo select...

This message was edited 1 time. Last update was at 14/03/2008 12:56:05


Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5

E dá-lhe Grêmio!
[MSN]
Guitar_Men
JavaEvangelist
[Avatar]

Membro desde: 21/02/2008 10:01:31
Mensagens: 463
Offline

tira o order by do primeiro select deixa só na ultima expressão, e tenta usar o UNION ALL



[WWW] [MSN]
fernandoeick
JavaEvangelist

Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline

Era isso mesmo Guitar_Men.

Obrigado, por enquando. No resultado da consulta, reparei alguns resultados indesejados, mas por enquanto agradeço muito.

Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5

E dá-lhe Grêmio!
[MSN]
Guitar_Men
JavaEvangelist
[Avatar]

Membro desde: 21/02/2008 10:01:31
Mensagens: 463
Offline

SQL rlz a lot !!!!



[WWW] [MSN]
fernandoeick
JavaEvangelist

Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline

brunoha wrote:Já que você não quer repetições no Resultset, então você pode juntar as duas consultas, e utilizar o Union, ao invés de criar 2 métodos, e unir o Resultset de cada um em um terceiro método.

Não entendi, como eu poderia unir o ResultSet de cada consulta em um terceiro método???

Olhem uma parte da saída produzida pela execução do SQL:

Tá dando uma linha para a Nota de Entrada e uma linha para a Nota de Saída (tem alguns produtos que não, coincidentemente estes que peguei, todos deram uma linha para a entrada e para a saída). Mas a questão é:

Como que eu excluo daqui esses registros repetidos agora?? Adiciono mais alguma coisa no meu SQL, ou trato o resultado deste em um novo método, ou alguma outra sugestão??? Agradeço.
Obs: Não consegui alinhar direito a tabela.

This message was edited 2 times. Last update was at 14/03/2008 13:16:37


Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5

E dá-lhe Grêmio!
[MSN]
brunoha
Thread.start()
[Avatar]

Membro desde: 07/03/2008 15:59:24
Mensagens: 26
Localização: São Paulo
Offline

fernandoeick, que tipo de resultado indesejado???

Se for repetido, vc vai ter que usar o Union, ao invés do Union All

Não sabia que era Postgree SQL, e tbm não tinha testado a query por aqui para ver se tava funfando realmente.
Desculpae...

Bruno Heitzmann
[MSN]
brunoha
Thread.start()
[Avatar]

Membro desde: 07/03/2008 15:59:24
Mensagens: 26
Localização: São Paulo
Offline

Pelo resultset que vc passou, penso eu q existe uma nota de entrada, e uma nota de saída para cada produto.
Não é isso?

Bruno Heitzmann
[MSN]
Guitar_Men
JavaEvangelist
[Avatar]

Membro desde: 21/02/2008 10:01:31
Mensagens: 463
Offline

Quais registros repetidos, se vc usou o distinct não tem result repetido...



[WWW] [MSN]
fernandoeick
JavaEvangelist

Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline

Pois é, esqueci de mencionar que era Postgree.

Mas o resultado indesejado, é este que colei acima, duplicação.

Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5

E dá-lhe Grêmio!
[MSN]
fernandoeick
JavaEvangelist

Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline

Bom, na verdade, o que eu quero, é que não apareçam duas linhas com o mesmo produto. Um produto (ou melhor, um codProd) pode aparecer somente uma vez.

Se o mesmo produto estiver na entrada, e estiver também na saída, eu quero exibir só um dos dois.

Ficou mais claro agora?

Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5

E dá-lhe Grêmio!
[MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team