- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 9 anos, 10 meses atrás por rman.
-
AutorPosts
-
7 de janeiro de 2015 às 7:13 pm #107272Claudio ReisParticipante
Boa tarde galera,
Estou com uma dúvida quando faço um select tenho 2 tabelas uma de capa X07 e uma dos itens dessa nota X08 e uma do cadastros de produtos X2013 eu qria trazer todas as notas que estao no intervalo os dados da nota que estão no intervalo ou seja sao 4 capas ..e se quiser trazer por produtos sao 10 itens e a descrição desses itens que é o unico campo da x2013 se eu não coloco o campo da X2013 ela retorna normal mas assim que eu coloco o campo no select ai ele retorna muitos valores o unico campo que amarra a X08 com a X2013 é o IDENT_PRODUTO alguém sabe o por que isso acontece? segue o codigo.SELECT DISTINCT X08.NUM_DOCFIS,
X08.DATA_FISCAL,
X2013.DESCRICAO
--
FROM X07_DOCTO_FISCAL X07
,X08_ITENS_MERC X08
,X2013_PRODUTO X2013
--
WHERE
X08.DATA_FISCAL >= '11-DEC-14' OR X08.DATA_FISCAL < '12-DEC-14' AND X07.NUM_DOCFIS = '001760' OR X07.NUM_DOCFIS = '132941' AND X07.NUM_DOCFIS = X08.NUM_DOCFIS AND X07.DATA_FISCAL = X08.DATA_FISCAL AND X07.COD_ESTAB = X08.COD_ESTAB AND X07.COD_EMPRESA = X08.COD_EMPRESA AND X07.IDENT_FIS_JUR = X08.IDENT_FIS_JUR AND X07.MOVTO_E_S = X08.MOVTO_E_S AND X07.NORM_DEV = X08.NORM_DEV AND X07.IDENT_DOCTO = X08.IDENT_DOCTO AND X07.IDENT_FIS_JUR = X08.IDENT_FIS_JUR AND X07.SERIE_DOCFIS = X08.SERIE_DOCFIS AND X07.SUB_SERIE_DOCFIS = X08.SUB_SERIE_DOCFIS AND X08.IDENT_PRODUTO = X2013.IDENT_PRODUTO AND X08.DATA_FISCAL = X2013.VALID_PRODUTO7 de janeiro de 2015 às 7:35 pm #107273rmanParticipante@Claudio Reis
Explique melhor o que você precisa trazer nesta consulta.
Quais sãos as chaves primárias de cada tabela?
Será que não está faltando nenhuma ligação?
Qual a razão de utilizar DISTINCT ?
Quais campos você quer trazer nesta consulta?
X08.DATA_FISCAL = X2013.VALID_PRODUTO, esta condição realmente está certa?
7 de janeiro de 2015 às 7:40 pm #107274Claudio ReisParticipanteEu qria trazer o cod do produto que esta na x07 os itens que estão na x08 mais a descricao que esta na x2013 todas as chaves estao ligadas entre a X07 com a X08 e o unico campo que liga a X2013 é o ident_produto que só liga com a X08 se eu comento a x2013 ela retorna corretas assim que eu adiciono o campo no select ela retorna muitas linhas o motivo do distinct era para que não retornasse campos duplicados. o VALID_PRODUTO é a data de cadastro do produto mas mesmo comentando X08.DATA_FISCAL = X2013.VALID_PRODUTO ele retorna muitos.
7 de janeiro de 2015 às 8:26 pm #107275Claudio ReisParticipanteApenas troquei a clausula do numero das notas colocando
AND X07.NUM_DOCFIS in ( ‘001760’,’132941′)
7 de janeiro de 2015 às 9:01 pm #107276rmanParticipante@Claudio Reis
Funciona da seguinte forma, você tem o relacionamento de 1 para N entre NOTA e ITEM NOTA e o relacionamento 1 para 1 entre ITEM NOTA e PRODUTO.
Quando você faz o JOIN entre NOTA e ITEM NOTA o que acontece? Para cada ITEM NOTA vai se repetir a NOTA, afinal os itens são da mesma NOTA. Então o uso do DISTINCT não se faz adequado, logo que você quer listar todos os itens. Exemplo se 1 NOTA possui 10 itens, a sua consulta deve retornar 10 registros, correto?
As condições do JOIN devem ser a ligação entre chave primária e chave estrangeira apenas, outras condições são filtros. Para evitar essa confusão do que é ligação e filtro eu prefiro utilizar INNER/LEFT/RIGHT JOIN, ficando os filtros apenas no WHERE.
-
AutorPosts
- Você deve fazer login para responder a este tópico.