Fórum eta Select complicadooo !!! #30437

03/11/2005

0

Galera... tah mto foda issu aki.... minha cabeça doi.. e naum consigo fazer de jeito nenhummm !!!!

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

Fx|hand

Responder

Posts

03/11/2005

Fx|hand

[quote:4be1198ccc=´FX|HanD´]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;

[/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;



Responder

Gostei + 0

03/11/2005

Wiltonfenix

Não testei, mas faz assim:

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;


Responder

Gostei + 0

03/11/2005

Fx|hand

Sem chance, ele dah um erro... naumm funciona...

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


Responder

Gostei + 0

04/11/2005

Fx|hand

é... como num teve jeito... resolvi o problema de outro jeito...
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 !!!


Responder

Gostei + 0

04/11/2005

Emerson Nascimento

não sei como seria no MySQL, mas no Interbase, Firebird e SQL Server isso funciona:

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



Responder

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 !!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar