Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

acdestefani

[Resolvido] Select em três tabelas

Recommended Posts

Olá Pessoal!

 

Tenho três tabelas:

* candidatos (campos: codigo, nome, endereco, recadastramento, datainscricao...)

* sorteados (campos: codigocandidato,...)

* dependentes (campos: codigocandidato)

 

Uso a seguinte pesquisa, que funciona corretamente, para obter os candidatos que constam na tabela candidatos e não constam na tabela sorteados e possuem os campos "recadastramento" maior ou igual a 2009 e "datainscricao" maior ou igual 04-04-2009:

SELECT candidatos.codigo FROM candidatos LEFT JOIN sorteados ON 
candidatos.codigo = sorteados.codigocandidato WHERE sorteados.codigocandidato IS NULL AND 
(candidatos.recadastramento >= '2009' OR candidatos.datainscricao >= '2009-04-04')

Agora estou precisando incluir mais uma tabela na consulta. Preciso fazer a mesma consulta citada acima, porém preciso acrescentar o número de dependentes que o candidato possui.

Aluém poderia me dar uma ajudar?

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda giesta!

 

Tentei assim:

SELECT candidatos.codigo FROM candidatos 
LEFT JOIN sorteados ON candidatos.codigo = sorteados.codigocandidato WHERE sorteados.codigocandidato IS NULL 
AND (candidatos.recadastramento >= '2009' OR candidatos.datainscricao >= '2009-04-04')
LEFT JOIN dependentes ON candidatos.codigo = dependentes.codigocandidato

Mas dá essa mensagem de erro:

 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN dependentes ON candidatos.codigo = dependentes.codigocandidato

LIMIT' at line 1

 

Dei uma pesquisada na internet, mas, infelizmente, ainda não consegui montar o consulta correta.

 

Outra coisa. É possível retornar o número de dependentes de cada candidato?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Conseguir fazer a consulta. Coloquei o LEFT JOIN da tabela dependentes primeiro, ficando assim:

SELECT candidatos.codigo FROM candidatos 
LEFT JOIN dependentes ON candidatos.codigo = dependentes.codigocandidato
LEFT JOIN sorteados ON candidatos.codigo = sorteados.codigocandidato WHERE sorteados.codigocandidato IS NULL 
AND (candidatos.recadastramento >= '2009' OR candidatos.datainscricao >= '2009-04-04')

Porém a consulta mostra o código do candidato quantas vezes ele aparece na tabela dependentes. Gostaria que ele mostrasse o código do candidato somente uma vez e a quantidade de vezes que ele foi cadastrado na tabela candidados, ou seja me retornasse o numéro de dependentes de cada candidato.

 

Dei uma linda sobre a função COUNT(*), mas não consegui inserí-la no meu select.

 

Alguém pode me ajudar?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltou um group by com o count.

 

SELECT candidatos.codigo, count(*)
FROM candidatos 
LEFT JOIN dependentes ON candidatos.codigo = dependentes.codigocandidato
LEFT JOIN sorteados ON candidatos.codigo = sorteados.codigocandidato WHERE sorteados.codigocandidato IS NULL 
AND (candidatos.recadastramento >= '2009' OR candidatos.datainscricao >= '2009-04-04')
GROUP BY candidatos.codigo

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda Chrnos!

A minha consulta tá funcionando certinho agora.

Só mais uma pergunta:

Através dessa consulta gero um relatório, em PHP, com os dados do candidato. Gostaria de acrescentar, nesse relatório, uma coluna com o número de dependentes. Como faria pra pegar o valor de count(*) e mostrá-lo no relatório?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar um subselect para isto... acho que seria algo assim no seu caso....

 

SELECT candidatos.codigo, count(*), (select count(*) from dependentes d where d.codigocandidato = candidatos.codigo ) as 'Total Dependentes'
FROM candidatos 
LEFT JOIN dependentes ON candidatos.codigo = dependentes.codigocandidato
LEFT JOIN sorteados ON candidatos.codigo = sorteados.codigocandidato WHERE sorteados.codigocandidato IS NULL 
AND (candidatos.recadastramento >= '2009' OR candidatos.datainscricao >= '2009-04-04')
GROUP BY candidatos.codigo

Talvez precise de alguma adaptação, mas seria +/- este o caminho.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda!

 

Consegui resolver o problema assim:

 

Usei um alias no SQL

SELECT candidatos.codigo, candidatos.nome, candidatos.endereco, candidatos.bairro, candidatos.foneempresa, candidatos.remuneracaocandidato, candidatos.nomeconj, candidatos.remuneracaoconj, candidatos.cpfcandidato, candidatos.cpfconj, candidatos.datanascimento, candidatos.datainscricao, candidatos.recadastramento,
count(*) AS qt

e recuperei como uma coluna

$r['qt']

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.