Ajuda - Busca - Membros - Calendário
Versão Completa: (Resolvido) Relacionamento
Fórum Script Brasil > Banco de Dados > SQL Server
Fernandinha
Boa noite pessoal,

Estou com um problema, tenho duas tabelas uma tem uma lista de dias que alunos terão aulas e outras tem apenas dias em que os alunos registraram falta na turma. Gostaria de juntar as duas, mas com inner join não está funcionando. segue abaixo...

Tabela de Frequencia

Id IdTurmaPQ DtRegistroFrequencia RegistroFrequencia IdMotivoSuspensaoPQ HrRealizadas MinRealizados IdUsuarioEvidencia DtEvidencia TpUsuarioEvidencia
45 11160 2011-08-01 00:00:00.000 R NULL 5 0 791899 2011-08-29 21:00:51.047 Q
46 11160 2011-08-02 00:00:00.000 R NULL 5 0 791899 2011-08-29 21:01:42.670 Q
48 11160 2011-08-03 00:00:00.000 R NULL 5 0 791899 2011-08-31 17:53:09.843 Q
50 11160 2011-08-05 00:00:00.000 R NULL 5 0 791899 2011-08-31 17:54:00.000 Q
51 11160 2011-08-08 00:00:00.000 R NULL 5 0 791899 2011-08-31 17:55:32.797 Q
52 11160 2011-08-09 00:00:00.000 R NULL 5 0 791899 2011-08-31 17:56:07.093 Q
66 11160 2011-08-10 00:00:00.000 R NULL 5 0 791899 2011-08-31 17:58:21.343 Q
67 11160 2011-08-11 00:00:00.000 R NULL 5 0 791899 2011-08-31 17:59:17.627 Q
68 11160 2011-08-12 00:00:00.000 R NULL 5 0 791899 2011-08-31 18:00:04.890 Q


FrequenciaAluno
IdFrequenciaPQ IdMatriculaPQ StatusFrequencia DtRegistroFrequencia
46 1200152 J 2011-08-02 00:00:00.000
48 1200152 A 2011-08-03 00:00:00.000
50 1200152 J 2011-08-05 00:00:00.000
51 1200152 A 2011-08-08 00:00:00.000
52 1200152 A 2011-08-09 00:00:00.000
67 1200152 A 2011-08-11 00:00:00.000
68 1200152 A 2011-08-12 00:00:00.000


Meu select é esse:
SELECT
FREQAL.IdFrequenciaPQ,
FREQAL.IdMatriculaPQ,
FREQAL.StatusFrequencia,
FREQ.DtRegistroFrequencia
FROM FREQUENCIAALUNO_PQ FREQAL
RIGHT JOIN FREQUENCIA_PQ FREQ ON FREQAL.IdFrequenciaPQ = FREQ.Id
WHERE FREQAL.IdMatriculaPQ IN (1200152)


Meu retorno deveria ser:


IdFrequenciaPQ IdMatriculaPQ StatusFrequencia DtRegistroFrequencia
null null P 2011-08-01 00:00:00.000
46 1200152 J 2011-08-02 00:00:00.000
48 1200152 A 2011-08-03 00:00:00.000
50 1200152 J 2011-08-05 00:00:00.000
51 1200152 A 2011-08-08 00:00:00.000
52 1200152 A 2011-08-09 00:00:00.000
67 1200152 A 2011-08-11 00:00:00.000
68 1200152 A 2011-08-12 00:00:00.000


Obrigada por ajudar....
fulvio
Bom dia Fernandinha,
Seu select está teoricamente correto. O problema que estou vendo é na cláusula WHERE. Faça o seguinte: troque o WHERE por AND. Isto fará com que o filtro fique contido no relacionamento entre as tabelas.
Assim aparecerá não somente 1, mas 2 registros a mais no resultado.

Perceba que: na primeira tabela você tem 9 registros. Na segunda 7 registros. Se fizer um relacionamento utilizando o RIGHT, você terá 9 registros como resultado, e não 8 registros. Faça os testes...

CODE
SELECT
FREQAL.IdFrequenciaPQ,
FREQAL.IdMatriculaPQ,
FREQAL.StatusFrequencia,
FREQ.DtRegistroFrequencia
FROM FREQUENCIAALUNO_PQ FREQAL
RIGHT JOIN FREQUENCIA_PQ FREQ ON FREQAL.IdFrequenciaPQ = FREQ.Id
AND FREQAL.IdMatriculaPQ IN (1200152)
Fernandinha
Ok... Deu certo.

Obrigada.
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.