Fórum eta Select complicadooo !!! #30437
03/11/2005
0
Vo tentar explicar....
Eu tenhu 3 Tabelas> Contatos, Emails, Telefones
os campos de Contatos > Codigo(Numero-AutoIncrement), Nome(Texto), Apelido(Texto), Endereco(Texto), Sobre(Texto)
os campos de EMails > CodContato(Numero), Email(Texto), Padrao(Boolean)
os campos de Telefones > CodContato(Numero), DDD(Texto), Numero, Padrao(Boolean)
fiz a PrimaryKey no Codigo da tabela Contatos.
fiz o Relacionamento das tabelas. Telefones.CodContato<>Codigo<>Emails.CodContato
Beleza... vamos a minha duvida....
Tenho 3 Registros
TABELA: Contatos CodigoNomeApelido 1Testesemapelido 2FernandoHand 3LauraLaura TABELA: Emails PadraoCodContatoEmail Sim2sakldjaskldj Não2sakldj Não3askdjklasjd Sim3kkkkkkkkkkkkk TABELA: Telefones PadraoCodContatoDDDNumero Sim2(012)2132-3123 Sim3(012)3232-3232
Eu fiz um Select, q ele seleciona nas 3 tabelas... Contatos.Nome, Contatos.Apelido, Emails.Email, Telefones.DDD, Telefones.Numero que seja padrão, organizado pelo Contatos.Nome ficou assim:
SELECT Contatos.Nome, Contatos.Apelido, Telefones.DDD, Telefones.Numero FROM (Contatos INNER JOIN Emails ON Contatos.Codigo = Emails.CodContato) INNER JOIN Telefones ON Contatos.Codigo = Telefones.CodContato WHERE (((Emails.Padrao)=True) AND ((Telefones.Padrao)=True)) ORDER BY Contatos.Nome;
Bom... até ai AXEI q tava funcionando na boua... só q tah ai, um grande problema....
Bom... e o 3º registro da tabela Contatos naum tem nem telefone, e nem email.... e nesse select q eu fiz lista assim:
NomeApelidoDDDNumero Email FernandoHand(012)2132-3123 sakldjaskldj LauraLaura(012)3232-3232 kkkkkkkkkkkkk
Como q eu faço pra ele poder listar TODOS os contatos, mesmo q tenha ou não tenha a porra do Email ou telefone...
espero q de pra intenderr...
Alguem me dah uma luz nissu pelamoorrr.....
Fx|hand
Curtir tópico
+ 0Posts
03/11/2005
Fx|hand
SELECT Contatos.Nome, Contatos.Apelido, Telefones.DDD, Telefones.Numero FROM (Contatos INNER JOIN Emails ON Contatos.Codigo = Emails.CodContato) INNER JOIN Telefones ON Contatos.Codigo = Telefones.CodContato WHERE (((Emails.Padrao)=True) AND ((Telefones.Padrao)=True)) ORDER BY Contatos.Nome;
[/quote:4be1198ccc]
Desculpaaa... mais o SQL q eu fiz é assim.... =)
SELECT Contatos.Nome, Contatos.Apelido, Telefones.DDD, Telefones.Numero, Emails.Email FROM (Contatos INNER JOIN Emails ON Contatos.Codigo=Emails.CodContato) INNER JOIN Telefones ON Contatos.Codigo=Telefones.CodContato WHERE (((Emails.Padrao)=True) AND ((Telefones.Padrao)=True)) ORDER BY Contatos.Nome;
Gostei + 0
03/11/2005
Wiltonfenix
SELECT Contatos.Nome, Contatos.Apelido, Telefones.DDD, Telefones.Numero, Emails.Email
FROM Contatos LEFT JOIN Emails ON (Contatos.Codigo=Emails.CodContato AND Emails.Padrao=True) LEFT JOIN Telefones ON (Contatos.Codigo=Telefones.CodContato AND Telefones.Padrao=True) ORDER BY Contatos.Nome;
Gostei + 0
03/11/2005
Fx|hand
axo q o JOIN é só pra comparar Campos entre tabelas, tipo campos chaves.... se eu colocar uma constante no Inner Join, ou Left Join naum funciona... =X
Gostei + 0
04/11/2005
Fx|hand
criei mais 3 campos na tabela Contatos... q seriaum o DDD, Numero, Email (Padrões...) e toh fazendo essa ligação por programação msm !!!
Gostei + 0
04/11/2005
Emerson Nascimento
TABELA: Contatos Codigo Nome Apelido 1 Teste semapelido 2 Fernando Hand 3 Laura Laura TABELA: Emails Padrao CodContato Email Sim 2 sakldjaskldj Não 2 sakldj Não 3 askdjklasjd Sim 3 kkkkkkkkkkkkk TABELA: Telefones Padrao CodContato DDD Numero Sim 2 (012) 2132-3123 Sim 3 (012) 3232-3232 Select Contatos.Nome, Contatos.Apelido, Telefones.DDD, Telefones.Numero, Emails.Email from Contatos Left Join Emails ON (Emails.CodContato=Contatos.Codigo) Left Join Telefones ON (Telefones.CodContato=Contatos.Codigo) Order by Contatos.Nome ou ainda: Select Contatos.Nome, Contatos.Apelido, Telefones.DDD, Telefones.Numero, Telefones.Padrao TelefonePadrao, Emails.Email, Emails.Padrao EmailPadrao from Contatos Left Join Emails ON (Emails.CodContato=Contatos.Codigo and Emails.Padrao=True) Left Join Telefones ON (Telefones.CodContato=Contatos.Codigo and Telefones.Padrao=True) Order by Contatos.Nome
Gostei + 0
04/11/2005
Fx|hand
SELECT Contatos.Nome, Contatos.Apelido, Emails.Email, Telefones.DDD, Telefones.Numero FROM (Contatos LEFT JOIN Emails ON (Contatos.Codigo = Emails.CodContato AND Emails.CodContato Is Not Null AND Emails.Padrao=True) or (Contatos.Codigo = Emails.CodContato AND Emails.CodContato Is Null)) LEFT JOIN Telefones ON (Contatos.Codigo=Telefones.CodContato AND Telefones.CodContato Is Not Null AND Telefones.Padrao = True) or (Contatos.Codigo = Telefones.CodContato AND Telefones.CodContato Is Null);
IUEhIEUhIUEHIUEHuiEHuihEUIhIUEHuiE... VALEUUU a todos aiiiiiii
Finalmente consegui fazer essa coisa... meu.. me fala... alguem jah feiz alguma coisa taum complicada quanto ????
PQP... esse sql foi de tirar o folegooo !!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)