Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Putz, como eu poderia criar um select que daria este efeito:
Tabela de Empresa
Tabela de Telefones
Tabela de Contatos
Desejado:
nome tel contato
EmpA 555 Joao
EmpA 666 Jose
EmpA 777 <null>
Neste caso a Empresa A tem 4 telefones e 2 contatos.
Atualmente Vindo
nome tel contato
EmpA 555 Joao
EmpA 555 Jose
EmpA 666 Joao
EmpA 666 Jose
EmpA 777 Joao
EmpA 777 Jose
Eu precisaria que faria algo assim:
-> Liste todos os telefones da empresa, ok
-> Liste os contatos, mas se ja listou todos, não liste de novo, venha vazio... null
-> Estou usando left join...
-> Então para sumir esta "duplicação", usando o distinct resolve?
(visto proximos posts não seria...)
-> Obrigado a todos
-> Select atual +- isso
SELECT cf.codigo, CF.RAZSOC AS RazaoSocial,
F.NUMTEL AS Telefone,
C.NOMCON AS Contato
--...
FROM CLIFOR CF
LEFT JOIN TELEFO F
ON ((CF.CODIGO = F.CODCLI))
LEFT JOIN CONTAT C
ON CF.CODIGO = C.CODCLI
ORDER BY CF.RAZSOCAcabou saindo a mesma coisa...
Acho que não é distinct pois realmente os registros não estão duplicados e o distinct faz isso, certo? to pesquisando mais sobre distinct, left join, right join, cross join, full join... select com union etc...
Acredito que todos esses vão me retornar os campos completos. Não sei se existe um que comando não traga o valor se este já foi listado... talvez não estou conseguindo explicar...
Desejado:
Desejado:
nome tel codcontato contato
EmpA 555 44 Joao
EmpA 666 55 Jose
EmpA 777 <null>(44) <null>
O registro com telefone 777 tem o codcontato 44 mas como ele ja trouxe este contato 44 não quero que liste, ficando
EmpA 777 <null> <null>
Sei lá se existe isso.
O LEFT JOIN daria este efeito se o número 44 não existisse no cadastro, mas ele existe. Precisaria que apenas listasse se já foi listado....
Desculpe a natural correria do desenvolvedor...
***********************
Perguntando para um amigo meu que passou aqui, achamos que não vou conseguir isso no select direto, e sim na hora de manipular os dados (ordena e tal e na hora de imprimir imprimo ou não)...
Continuo pesquisando mas deve ser isso...
Não trazer valores já listados ?!
Tente o min ou max do fone ...
SELECT distinct cf.codigo, CF.RAZSOC AS RazaoSocial,
F.NUMTEL AS Telefone,
C.NOMCON AS Contato
--...
FROM CLIFOR CF
LEFT JOIN TELEFO F
ON ((CF.CODIGO = F.CODCLI))
LEFT JOIN CONTAT C
ON CF.CODIGO = C.CODCLI
where F.NUMTEL = (select f2.numtel
from TELEFO F2
where F2.CODCLI = F.CODCLI
and F2.codigo = F.codigo)
ORDER BY CF.RAZSOC
se telefo tem o codigo, senão tire a parte
and F2.codigo = F.codigo
Não trazer valores já listados ?!
Tente o min ou max do fone ...
SELECT distinct cf.codigo, CF.RAZSOC AS RazaoSocial,
F.NUMTEL AS Telefone,
C.NOMCON AS Contato
--...
FROM CLIFOR CF
LEFT JOIN TELEFO F
ON ((CF.CODIGO = F.CODCLI))
LEFT JOIN CONTAT C
ON CF.CODIGO = C.CODCLI
where F.NUMTEL = (select f2.numtel
from TELEFO F2
where F2.CODCLI = F.CODCLI
and F2.codigo = F.codigo)
ORDER BY CF.RAZSOC
se telefo tem o codigo, senão tire a parte
and F2.codigo = F.codigo
desculpe estar correndo de novo, dei uma olhada mas nao deu muito resultado nao e não sei se vai existir algo que não traga o valor se este já foi listado..., trazendo nulo no ligar....
nome tel contato
EmpA 555 Joao
EmpA 666 Jose
EmpA 777 <null>
EmpA 888 <null>
Cliente A tem 4 telefones e 2 contatos. O contato nao está relacionado com telefone e sim com o cliente
Desculpe novamente estar jogando as informações, correria do dia dia, deveria montar melhor a questão....
Ate mais e muito obrigado
Por query não tem como montar o que você quer (ou eu não vejo como) , pois não são as informações que constam da base.
Com geradores de relatório como Crystal dá para formatações do tipo "suprimir se duplicado" que caberia no caso dos contato, mas por query realmente não vejo como.
Na realidade seria algo do tipo
EMPRESA CONTATO FONE
IMASTERS BRASIL 23456789
IMASTERS * 98765432
MAICROSOFTI WILLIAN 23455432
* BRASIL-no caso suprimido.
Pois é, estou tentando de todas as formas mas está convergindo para isso mesmo, depois do select trazer as informações trato estes resultados no delphi
De qualquer forma foi bom relembrar todas as alternativas
Muito obrigado pelas informações!
Tente ...
FROM CLIFOR CF LEFT JOIN TELEFO F ON ((CF.CODIGO = F.CODCLI)) LEFT JOIN CONTAT C ON CF.CODIGO = C.CODCLI ORDER BY CF.RAZSOC