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!
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!
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!
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!
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
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?
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
Você sabe como eu pegaria o valor de count e passaria para o PHP, pra usá-lo no relatório?
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']
basta dar mais um left join