SQL trplicando resultado
Quando eu executo o seguinte fonte no SQL trás resultado triplicado
SELECT CN9_NUMERO AS ''''CONTRATO'''',
CONVERT(DATE, SUBSTRING(CN9_DTINIC, 1, 4) + ''''-'''' + SUBSTRING(CN9_DTINIC, 5, 2) + ''''-'''' + SUBSTRING(CN9_DTINIC, 7, 2)) AS ''''DT INICIO'''',
CONVERT(DATE, SUBSTRING(CN9_DTFIM, 1, 4) + ''''-'''' + SUBSTRING(CN9_DTFIM, 5, 2) + ''''-'''' + SUBSTRING(CN9_DTFIM, 7, 2)) AS ''''DT FIM'''',
CN9_NUMERO AS ''''CENTRO DE CUSTO'''',
CN9_ZZEMTI AS ''''ART EMITIDA'''',
CONVERT(DATE,CN9_ZZDTVA) AS ''''VALIDADE DA ART'''',
CN9_VLATU AS ''''VALOR CONTRATO'''',
CNC_CLIENT AS ''''CLIENTE'''',
CNC_LOJACL AS ''''LOJA CLIENTE'''',
A1_NOME AS ''''NOME CLIENTE'''',
CNE_PEDIDO AS ''''PEDIDO'''',
CNE_PERC AS ''''PERCENTUAL'''',
C6_NOTA AS ''''NOTA FISCAL'''',
E1_NUM AS ''''NUMERO'''',
CNE_REVISA,
CONVERT(DATE,E1_BAIXA) AS ''''DT BAIXA'''',
CNF_VLPREV AS ''''VALOR PREVISTO'''',
CNF_PARCEL AS ''''PARCELA'''',
CONVERT(DATE,CNF_DTVENC) AS ''''VENCIMENTO''''
FROM CN9010 CN9
INNER JOIN CNC010 CNC ON CNC.CNC_NUMERO = CN9.CN9_NUMERO AND CNC.D_E_L_E_T_ =''''''''
INNER JOIN SA1010 A1 ON CNC.CNC_CLIENT = A1.A1_COD AND CNC.CNC_LOJACL = A1.A1_LOJA AND A1.D_E_L_E_T_ =''''''''
INNER JOIN CNF010 CNF ON CNF.CNF_CONTRA = CN9.CN9_NUMERO AND CN9.D_E_L_E_T_=''''''''
INNER JOIN CNE010 CNE ON CNE.CNE_CONTRA = CNF.CNF_CONTRA AND CNE.D_E_L_E_T_=''''''''
INNER JOIN SC6010 C6 ON C6.C6_NUM = CNE.CNE_PEDIDO AND C6.D_E_L_E_T_ =''''''''
INNER JOIN SE1010 E1 ON E1.E1_NUM = C6.C6_NOTA AND E1.D_E_L_E_T_ ='''''''' AND E1.E1_TIPO =''''NF''''
WHERE CN9.D_E_L_E_T_=''''''''
AND CN9_NUMERO = ''''201000272''''
AND CN9_REVISA = ''''002''''
AND CN9.D_E_L_E_T_=''''''''
AND CNF_CONTRA = ''''201000272''''
AND CNF_REVISA = ''''002''''
AND CNF.D_E_L_E_T_=''''''''
AND CNE_CONTRA = ''''201000272''''
AND CNE_REVISA = ''''002''''
AND CNE.D_E_L_E_T_=''''''''
AND E1_PREFIXO = ''''SRV''''
AND CNC_NUMERO = ''''201000272''''
AND CNC_REVISA = ''''002''''
GROUP BY CN9_NUMERO,CN9_REVISA,CN9_DTINIC,CN9_DTFIM,CN9_NUMERO,CN9_ZZEMTI,CN9_ZZDTVA,CN9_VLATU,CNC_CLIENT,CNC_LOJACL, A1_NOME, CNE_PEDIDO, CNE_PERC, C6_NOTA, E1_NUM, CNE_REVISA, E1_BAIXA, CNF_VLPREV, CNF_PARCEL, CNF_DTVENC
SELECT CN9_NUMERO AS ''''CONTRATO'''',
CONVERT(DATE, SUBSTRING(CN9_DTINIC, 1, 4) + ''''-'''' + SUBSTRING(CN9_DTINIC, 5, 2) + ''''-'''' + SUBSTRING(CN9_DTINIC, 7, 2)) AS ''''DT INICIO'''',
CONVERT(DATE, SUBSTRING(CN9_DTFIM, 1, 4) + ''''-'''' + SUBSTRING(CN9_DTFIM, 5, 2) + ''''-'''' + SUBSTRING(CN9_DTFIM, 7, 2)) AS ''''DT FIM'''',
CN9_NUMERO AS ''''CENTRO DE CUSTO'''',
CN9_ZZEMTI AS ''''ART EMITIDA'''',
CONVERT(DATE,CN9_ZZDTVA) AS ''''VALIDADE DA ART'''',
CN9_VLATU AS ''''VALOR CONTRATO'''',
CNC_CLIENT AS ''''CLIENTE'''',
CNC_LOJACL AS ''''LOJA CLIENTE'''',
A1_NOME AS ''''NOME CLIENTE'''',
CNE_PEDIDO AS ''''PEDIDO'''',
CNE_PERC AS ''''PERCENTUAL'''',
C6_NOTA AS ''''NOTA FISCAL'''',
E1_NUM AS ''''NUMERO'''',
CNE_REVISA,
CONVERT(DATE,E1_BAIXA) AS ''''DT BAIXA'''',
CNF_VLPREV AS ''''VALOR PREVISTO'''',
CNF_PARCEL AS ''''PARCELA'''',
CONVERT(DATE,CNF_DTVENC) AS ''''VENCIMENTO''''
FROM CN9010 CN9
INNER JOIN CNC010 CNC ON CNC.CNC_NUMERO = CN9.CN9_NUMERO AND CNC.D_E_L_E_T_ =''''''''
INNER JOIN SA1010 A1 ON CNC.CNC_CLIENT = A1.A1_COD AND CNC.CNC_LOJACL = A1.A1_LOJA AND A1.D_E_L_E_T_ =''''''''
INNER JOIN CNF010 CNF ON CNF.CNF_CONTRA = CN9.CN9_NUMERO AND CN9.D_E_L_E_T_=''''''''
INNER JOIN CNE010 CNE ON CNE.CNE_CONTRA = CNF.CNF_CONTRA AND CNE.D_E_L_E_T_=''''''''
INNER JOIN SC6010 C6 ON C6.C6_NUM = CNE.CNE_PEDIDO AND C6.D_E_L_E_T_ =''''''''
INNER JOIN SE1010 E1 ON E1.E1_NUM = C6.C6_NOTA AND E1.D_E_L_E_T_ ='''''''' AND E1.E1_TIPO =''''NF''''
WHERE CN9.D_E_L_E_T_=''''''''
AND CN9_NUMERO = ''''201000272''''
AND CN9_REVISA = ''''002''''
AND CN9.D_E_L_E_T_=''''''''
AND CNF_CONTRA = ''''201000272''''
AND CNF_REVISA = ''''002''''
AND CNF.D_E_L_E_T_=''''''''
AND CNE_CONTRA = ''''201000272''''
AND CNE_REVISA = ''''002''''
AND CNE.D_E_L_E_T_=''''''''
AND E1_PREFIXO = ''''SRV''''
AND CNC_NUMERO = ''''201000272''''
AND CNC_REVISA = ''''002''''
GROUP BY CN9_NUMERO,CN9_REVISA,CN9_DTINIC,CN9_DTFIM,CN9_NUMERO,CN9_ZZEMTI,CN9_ZZDTVA,CN9_VLATU,CNC_CLIENT,CNC_LOJACL, A1_NOME, CNE_PEDIDO, CNE_PERC, C6_NOTA, E1_NUM, CNE_REVISA, E1_BAIXA, CNF_VLPREV, CNF_PARCEL, CNF_DTVENC
Gustavo Jacob
Curtidas 0
Respostas
Ana Lichirgu
14/03/2019
Bom dia! Tente trocar os Inner Joins por Left ou right join, dependendo da situação...Pode estar dando plano cartesiano...
Espero ter ajudado!
Espero ter ajudado!
GOSTEI 0
Luiz Santos
14/03/2019
Bom dia Gustavo.
Como a Ana falou na resposta anterior, é bem provável que seu problema esteja no JOIN.
Isso acontece porque em alguma das tabelas relacionadas vc tem mais de uma ocorrência para cada valor / campo que vc passa para "amarrar" as tabelas.
Vc precisa descobrir em qual dos JOINS isso acontece, e para resolver, provavelmente terá que usar mais campos para fazer a "amarração".
Grande abraço
Como a Ana falou na resposta anterior, é bem provável que seu problema esteja no JOIN.
Isso acontece porque em alguma das tabelas relacionadas vc tem mais de uma ocorrência para cada valor / campo que vc passa para "amarrar" as tabelas.
Vc precisa descobrir em qual dos JOINS isso acontece, e para resolver, provavelmente terá que usar mais campos para fazer a "amarração".
Grande abraço
GOSTEI 0
Gustavo Jacob
14/03/2019
Bom dia! Tente trocar os Inner Joins por Left ou right join, dependendo da situação...Pode estar dando plano cartesiano...
Espero ter ajudado!
Espero ter ajudado!
Tentei de todos os jeitos sem INNER JOIN, usei left e right, ou só left ou right ao vice versa, mas nenhum funcionou
GOSTEI 0
Rhuan Pablo
14/03/2019
Para este seu caso realmente o problema pode estar no relacionamento dos dados, te oriento a verificar retirando os joins aos poucos juntamente com as suas informações, no momento que parar de trazer resultado repetido vá retornando os joins que não dupliquem seus dados, alterar de inner para left ou rigth não irá resolver seu problema, visto que eles iram trazer a informação da tabela principal tendo o dado na tabela secundaria ou não, enquanto o inner só trás se o registro estiver em ambas as tabelas.
Algum fechamento das chaves está incorreta.
Suas tabelas são bem confusas em relação aos nomes, então acredito que será um pouco complicado alguém te dar uma resposta para o seu problema, então unica coisa que lhe resta é estudar de fato o relacionamento entre as tabelas.
Algum fechamento das chaves está incorreta.
Suas tabelas são bem confusas em relação aos nomes, então acredito que será um pouco complicado alguém te dar uma resposta para o seu problema, então unica coisa que lhe resta é estudar de fato o relacionamento entre as tabelas.
GOSTEI 0