Consulta que não traga certo registro

(jcesarml) #1

Boa tarde

Alguém poderia me ajudar eu no raciocínio desta consulta?

Quero trazer os alunos que não comparecem acima de uma certa data.

Filtrarei a data no formulário de consulta, mais com a instrução abaixo o sistema me traz todas as aulas que os alunos faltaram, sendo que eu quero apenas aqueles que faltaram em todas as aulas neste período, se ele veio em uma aula, quero excluí-lo desta consulta, mesmo que ele tenha faltado na maioria.

SELECT DISTINCT cadastro.CADASTRO_ID, cadastro.NOME, cadastro.TELEFONE, cadastro.ATIVO, aulas.AULA_ID, aulas.TIPO_ID, aulas.DATA_HORA, aulas_alunos.ALUNO_ID, aulas_alunos.PRESENTE FROM cadastro cadastro INNER JOIN aulas_alunos aulas_alunos ON cadastro.CADASTRO_ID = aulas_alunos.ALUNO_ID INNER JOIN aulas aulas ON aulas_alunos.AULA_ID = aulas.AULA_ID WHERE (cadastro.ATIVO = 1)AND (aulas_alunos.PRESENTE = 0) ORDER BY tribo ASC, NOME ASC

(Haroldo) #2

Cria uma sub query na were com count , se maior que zero mostra se igual 0 não mostra

(jcesarml) #3

Boa tarde Haroldo

Eu usei parte de sua idéia que é usar a subquerry como abaixo:

SELECT distinct cadastro.CADASTRO_ID, cadastro.NOME, cadastro.TELEFONE, cadastro.CELULAR, cadastro.EMAIL, cadastro.CLASSE, cadastro.ATIVO, FROM cadastro WHERE cadastro.CADASTRO_ID NOT IN (SELECT cadastro.CADASTRO_ID FROM cadastro cadastro INNER JOIN aulas_alunos aulas_alunos ON cadastro.CADASTRO_ID = aulas_alunos.ALUNO_ID INNER JOIN aulas aulas ON aulas_alunos.AULA_ID = aulas.AULA_ID WHERE aulas_alunos.PRESENTE = '0' AND cadastro.ATIVO = '1' AND aulas.DATA_HORA >= '2011-06-12 10:00:00') ORDER BY CLASSE ASC, NOME ASC

mas tem um problema, eu pedi para a query não me retornar aqueles registros que estivessem na subquery, porém está me retornando registros desrespeitando os operadores AND. O que posso estar errando?

Agradeço

(Haroldo) #4

o que traz esse select?

SELECT cadastro.CADASTRO_ID
FROM cadastro cadastro INNER JOIN aulas_alunos aulas_alunos ON cadastro.CADASTRO_ID = aulas_alunos.ALUNO_ID INNER JOIN aulas aulas ON aulas_alunos.AULA_ID = aulas.AULA_ID
WHERE
aulas_alunos.PRESENTE = ‘0’ AND cadastro.ATIVO = ‘1’ AND aulas.DATA_HORA >= ‘2011-06-12 10:00:00’

(jcesarml) #5

Este select me retorna todos os alunos que não estão presentes (PRESENTE = ‘0’ ), que estejam ativos (cadastro.ATIVO = ‘1’), após esta data (‘2011-06-12 10:00:00’). Coloquei um NOT IN, porquê eu quero os alunos que não estejam nesta situação.

FROM cadastro cadastro INNER JOIN aulas_alunos aulas_alunos ON cadastro.CADASTRO_ID = aulas_alunos.ALUNO_ID INNER JOIN aulas aulas ON aulas_alunos.AULA_ID = aulas.AULA_ID aqui eu estou associando três tabelas, um campo do cadastro com o campo de aulas_alunos, este por sua vez com aulas.

(Haroldo) #6

Mas com o NOT IN o select traz oque você precisa?

(jcesarml) #7

Sim, todos que não estejam nesta situação, por quê?

(Haroldo) #8

então se colocar where in (esse select) no select principal tem que funcionar.

(jcesarml) #9

Haroldo, mas a dificuldade não é essa!!! Teria que funcionar NOT IN também…mas negando a proposição…
Haroldo, acredito que você não tenha entendido, eu preciso que o sistema não traga certo registro e neste caso ele traria.