Ir para conteúdo

POWERED BY:

Arquivado

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

aletres

JOIN - Quando a 2ª tabela não tem vinculo com a 1ª

Recommended Posts

Tenho duas tabelas:

 

cam (campeonatos)

cal (calendário)

 

Então tenho um calendário e cada data diz de qual campeonato pertence.

 

Acontece que alguns calendários não tem campeonato cadastrado pois não será feita por nós.

 

SELECT * FROM cal 
LEFT JOIN cam ON cam.cam_id = cal.cal_cam_id 
WHERE cam_ano = '.$ano_atual.' 
ORDER BY cam_tipo,cal_data ASC

O código acima retorna apenas os calendários que tem o cal_cam_id diferente de 0.

 

Como digo ao MySQL para retornar todas as linhas, incluindo quando não achar o cal_cam_id na tabela cam?

 

Obrigado desde já.

 

Alexandre.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo com a sua dica não consegui resolver o problema e resolvi ir tirando partes do código até chegar ao modo mais simples.

 

Cheguei a conclusão de que retirando a parte do código AND cam_ano = '.$ano_atual.' ele funcionava.

 

SELECT * FROM cal 
LEFT OUTER JOIN cam ON cam.cam_id = cal.cal_cam_id 
WHERE cal_data >= "'.$data_atual_completa.'" AND cal_data < "'.$dia_mais.'" AND cam_ano = '.$ano_atual.' 
ORDER BY cam_tipo,cal_data ASC

Alguém sabe o porque o LEFT OUTER JOIN não funciona com um WHERE da segunda tabela?

 

Valeu Guilherme.

 

Alexandre.

www.fullblog.com.br

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não uso muito o outer join no mysql. Mas tenta inverter os campos do join

 

SELECT * FROM cal

LEFT OUTER JOIN cam ON cal.cal_cam_id = cam.cam_id

WHERE cal_data >= "'.$data_atual_completa.'" AND cal_data < "'.$dia_mais.'" AND cam_ano = '.$ano_atual.'

ORDER BY cam_tipo,cal_data ASC

 

O lado que o atributo fica define qual tabela que ele vai retornar se não tiver registro. Isto pelo menos no outer join do oracle é assim. Teste, se der certo, bom também..

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.