Re: [oracle_br] Re: Sub Query
Chiappa, na realidade eu NÃO quero trazer nenhuma coluna da tabela Detalhes, eu apenas quero filtrar por uma coluna da tabela Detalhes. Se fizer o join entre as duas tabelas, vai replicar os mesmos dados da tabela Mestre tantas vezes quanto houver itens na tabela Detalhes. Nao tentei fazer um Select distinct pra eliminar essa duplicação...vou tentar isso tb... Obrigado. Emerson Emerson Sanches Analista de Sistemas Em 3 de fevereiro de 2015 17:23, jlchia...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Para que vc precisa de sub-query ??? Se Realmente NumNota, Serie, Fornecedor e TipoMovto é a PK ** e ** isso está Presente nas duas tabelas como Chave, por que vc não faz um JOIN entre as duas ?? Assim : SELECT colunasdesejadasTANTOdatabeladeNOTAquantodaITEM FROM Mestre m, Detalhe d WHERE m.NumNota= i.NumNota AND m.Serie = i.Serie AND m.Fornecedor = i.Fornecedor AND m.TipoMovto = i.TipoMovto AND d.Item = v_item; []s Chiappa
Re: [oracle_br] Re: Sub Query
Aí muda um pouco de figura : Então, para esses casos em que vc não precisa retornar informação de uma tabela mas sim só pesquisar se uma condição existe, aí o mais indicado seria mesmo o EXISTS , ele serve para isso. A consulta ficaria : Select * from Mestre m where exists(select 1 from Detalhe d where m.NumNota= d.NumNota and m.Serie = d.Serie and m.Fornecedor = d.Fornecedor and m.TipoMovto = d.TipoMovto and d.Item = v_item ); em português, estamos dizendo acima : leia cada linha da tabela Mestre, e para cada linha lida verifique se existe uma linha correspondente na Detalhe E que além disso o Item seja o especificado - automagicamente as linhas da Mestre que não tiverem Correspondência não são exibidas, essa é a função do EXISTS, dá uma estudada no manual SQL Reference (e num bom livro de linguagem SQL para mais detalhes... []s Chiappa
RE: [oracle_br] Re: Sub Query
Uma opção alternativa ao exists: select ... from a where ( a.c1, a.c2 ) in ( select b.c1, b.c2 from b where b.c3 = ... ) Étore From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Sent: quarta-feira, 4 de fevereiro de 2015 08:56 To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Re: Sub Query Chiappa, na realidade eu NÃO quero trazer nenhuma coluna da tabela Detalhes, eu apenas quero filtrar por uma coluna da tabela Detalhes. Se fizer o join entre as duas tabelas, vai replicar os mesmos dados da tabela Mestre tantas vezes quanto houver itens na tabela Detalhes. Nao tentei fazer um Select distinct pra eliminar essa duplicação...vou tentar isso tb... Obrigado. Emerson Emerson Sanches Analista de Sistemas Em 3 de fevereiro de 2015 17:23, jlchia...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Para que vc precisa de sub-query ??? Se Realmente NumNota, Serie, Fornecedor e TipoMovto é a PK ** e ** isso está Presente nas duas tabelas como Chave, por que vc não faz um JOIN entre as duas ?? Assim : SELECT colunasdesejadasTANTOdatabeladeNOTAquantodaITEM FROM Mestre m, Detalhe d WHERE m.NumNota= i.NumNota AND m.Serie = i.Serie AND m.Fornecedor = i.Fornecedor AND m.TipoMovto = i.TipoMovto AND d.Item = v_item; []s Chiappa [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Re: Sub Query
Problema resolvido. Obrigado a todos pela atenção. Emerson Emerson Sanches Analista de Sistemas Em 4 de fevereiro de 2015 11:15, 'Schiavini' et...@schiavini.inf.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Uma opção alternativa ao exists: select ... from a where ( a.c1, a.c2 ) in ( select b.c1, b.c2 from b where b.c3 = ... ) Étore From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Sent: quarta-feira, 4 de fevereiro de 2015 08:56 To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Re: Sub Query Chiappa, na realidade eu NÃO quero trazer nenhuma coluna da tabela Detalhes, eu apenas quero filtrar por uma coluna da tabela Detalhes. Se fizer o join entre as duas tabelas, vai replicar os mesmos dados da tabela Mestre tantas vezes quanto houver itens na tabela Detalhes. Nao tentei fazer um Select distinct pra eliminar essa duplicação...vou tentar isso tb... Obrigado. Emerson Emerson Sanches Analista de Sistemas Em 3 de fevereiro de 2015 17:23, jlchia...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Para que vc precisa de sub-query ??? Se Realmente NumNota, Serie, Fornecedor e TipoMovto é a PK ** e ** isso está Presente nas duas tabelas como Chave, por que vc não faz um JOIN entre as duas ?? Assim : SELECT colunasdesejadasTANTOdatabeladeNOTAquantodaITEM FROM Mestre m, Detalhe d WHERE m.NumNota = i.NumNota AND m.Serie = i.Serie AND m.Fornecedor = i.Fornecedor AND m.TipoMovto = i.TipoMovto AND d.Item = v_item; []s Chiappa [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Re: Sub Query
Boa noite! Não que as outras soluções não funcionem. Mas eu daria e recomendaria fortemente a sugestão já dada por Chiappa... Pois é meio que a essência, o conceito ou propósito de um banco de dados relacional: Simplesmente relacionar as tabelas desejadas, através dos devidos e respectivos campos-chave (FK's) das mesmas... E só. Neste caso, não precisa de sub-queries ou exists, etc. Só relacionar mesmo, e boa. Espero ter ajudado, abraços! Em 3 de fevereiro de 2015 17:24, jlchia...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Claro, se eu usei d como alias para a tabela de detalhes, d. deveria ser o prefixo, substitua... []s Chiappa -- Atenciosamente, *Gustavo Guedes de Sene*