Ajuda em uma Questão em SQL
alguem poderia porfavor me ajudar nesse problema?, preciso de uma explicação e como seria o modo certo.
estou tentando realizar um select em várias tabelas e nao estou conseguindo, para ser mais preciso estou tentando selecionar todos os contatos de um usuário, e o sql executa mas retorna um conjunto vazio.
SELECT contato.nome, contato.apelido,
contato.aniversario, contato.notas,
contato.familia, contato.prefix, contato.sufix,
telefone.telefone, telefone.tipo,
email.email, endereco.endereco, endereco.tipo,endereco.rua,
endereco.cidade, endereco.estado, endereco.cep, ims.ims,
organizacao.organizacao, organizacao.departamento,
organizacao.titulo, foto.foto, categoria.categoria, url.rul
FROM contato, telefone, email, endereco, ims, organizacao, foto, categoria,url
WHERE contato.id = telefone.id_contato
AND contato.id = email.id_contato
AND contato.id = endereco.id_contato
AND contato.id = ims.id_contato
AND contato.id = organizacao.id_contato
AND contato.id = foto.id_contato
AND contato.id = categoria.id_contato
AND contato.id = url.id_contato
AND contato.id_usuario = 10
estou tentando realizar um select em várias tabelas e nao estou conseguindo, para ser mais preciso estou tentando selecionar todos os contatos de um usuário, e o sql executa mas retorna um conjunto vazio.
SELECT contato.nome, contato.apelido,
contato.aniversario, contato.notas,
contato.familia, contato.prefix, contato.sufix,
telefone.telefone, telefone.tipo,
email.email, endereco.endereco, endereco.tipo,endereco.rua,
endereco.cidade, endereco.estado, endereco.cep, ims.ims,
organizacao.organizacao, organizacao.departamento,
organizacao.titulo, foto.foto, categoria.categoria, url.rul
FROM contato, telefone, email, endereco, ims, organizacao, foto, categoria,url
WHERE contato.id = telefone.id_contato
AND contato.id = email.id_contato
AND contato.id = endereco.id_contato
AND contato.id = ims.id_contato
AND contato.id = organizacao.id_contato
AND contato.id = foto.id_contato
AND contato.id = categoria.id_contato
AND contato.id = url.id_contato
AND contato.id_usuario = 10
Vinicius
Curtidas 0
Melhor post
Luiz Santos
18/09/2016
Vinicius, do jeito que você montou, obrigatoriamente tem de haver dados em todas as tabelas, se não vai retornar um conjunto vazio.
Faça o teste em todas elas com o mesmo ID CONTATO, para ver onde não retorna nada.
Outro jeito é você mudar o seu código.
Nele você colocou todos os relacionamento dentro do WHERE.
Tente colocá-los dentro do FROM, e use LEFT JOIN.
Consegui ser claro?
Grande abs
Faça o teste em todas elas com o mesmo ID CONTATO, para ver onde não retorna nada.
Outro jeito é você mudar o seu código.
Nele você colocou todos os relacionamento dentro do WHERE.
Tente colocá-los dentro do FROM, e use LEFT JOIN.
Consegui ser claro?
Grande abs
GOSTEI 1
Mais Respostas
Jair N.
18/09/2016
Boa Noite, faça por partes, algum destes pode conter dados vazios, ou não relacionados
GOSTEI 0
Vinicius
18/09/2016
Boa noite, este é uma questão de um trabalho da faculdade, e nao estou conseguindo bem saber o real problema, oq a questão pede é para eu fazer um código resolvendo o problema, você teria alguma solução e se possivel me explicar?. obrigado pela atenção.
GOSTEI 0
André Coimbra
18/09/2016
Verifique se te ajuda:
SELECT
CONTATO.NOME
,CONTATO.APELIDO
,CONTATO.ANIVERSARIO
,CONTATO.NOTAS
,CONTATO.FAMILIA
,CONTATO.PREFIX
,CONTATO.SUFIX
,TELEFONE.TELEFONE
,TELEFONE.TIPO
,EMAIL.EMAIL
,ENDERECO.ENDERECO
,ENDERECO.TIPO
,ENDERECO.RUA
,ENDERECO.CIDADE
,ENDERECO.ESTADO
,ENDERECO.CEP
,IMS.IMS
,ORGANIZACAO.ORGANIZACAO,
,ORGANIZACAO.DEPARTAMENTO,
,ORGANIZACAO.TITULO,
,FOTO.FOTO,
,CATEGORIA.CATEGORIA
,URL.URL
FROM
CONTATO
LEFT JOIN TELEFONE ON
(CONTATO.ID = TELEFONE.ID_CONTATO)
LEFT JOIN EMAIL ON
(CONTATO.ID = EMAIL.ID_CONTATO)
LEFT JOIN ENDERECO ON
(CONTATO.ID = ENDERECO.ID_CONTATO)
LEFT JOIN IMS ON
(CONTATO.ID = IMS.ID_CONTATO)
LEFT JOIN ORGANIZACAO ON
(CONTATO.ID = ORGANIZACAO.ID_CONTATO)
LEFT JOIN FOTO ON
(CONTATO.ID = FOTO.ID_CONTATO)
LEFT JOIN CATEGORIA ON
(CONTATO.ID = CATEGORIA.ID_CONTATO)
LEFT JOIN URL ON
(CONTATO.ID = URL.ID_CONTATO)
WHERE
CONTATO.ID_USUARIO = 10
Para estas situações, procure usar o Inner, left, right ou full join... de uma pesquisada a mais a respeito desses comandos.
Atte.,
SELECT
CONTATO.NOME
,CONTATO.APELIDO
,CONTATO.ANIVERSARIO
,CONTATO.NOTAS
,CONTATO.FAMILIA
,CONTATO.PREFIX
,CONTATO.SUFIX
,TELEFONE.TELEFONE
,TELEFONE.TIPO
,EMAIL.EMAIL
,ENDERECO.ENDERECO
,ENDERECO.TIPO
,ENDERECO.RUA
,ENDERECO.CIDADE
,ENDERECO.ESTADO
,ENDERECO.CEP
,IMS.IMS
,ORGANIZACAO.ORGANIZACAO,
,ORGANIZACAO.DEPARTAMENTO,
,ORGANIZACAO.TITULO,
,FOTO.FOTO,
,CATEGORIA.CATEGORIA
,URL.URL
FROM
CONTATO
LEFT JOIN TELEFONE ON
(CONTATO.ID = TELEFONE.ID_CONTATO)
LEFT JOIN EMAIL ON
(CONTATO.ID = EMAIL.ID_CONTATO)
LEFT JOIN ENDERECO ON
(CONTATO.ID = ENDERECO.ID_CONTATO)
LEFT JOIN IMS ON
(CONTATO.ID = IMS.ID_CONTATO)
LEFT JOIN ORGANIZACAO ON
(CONTATO.ID = ORGANIZACAO.ID_CONTATO)
LEFT JOIN FOTO ON
(CONTATO.ID = FOTO.ID_CONTATO)
LEFT JOIN CATEGORIA ON
(CONTATO.ID = CATEGORIA.ID_CONTATO)
LEFT JOIN URL ON
(CONTATO.ID = URL.ID_CONTATO)
WHERE
CONTATO.ID_USUARIO = 10
Para estas situações, procure usar o Inner, left, right ou full join... de uma pesquisada a mais a respeito desses comandos.
Atte.,
GOSTEI 1
Vinicius
18/09/2016
Muito obrigado pela ajuda. irá me ajudar.
GOSTEI 0