SQL - Subtrair duas consultas ?
O caso é o seguinte
Tenho uma consulta que mostra todos os professores de um determinado aluno.
Tenho também, uma tabela de controle onde insiro o código do aluno e o código do professor que aquele aluno avaliou.
OK
Para saber qual professor o aluno avaliou utilizo o código abaixo
Bom, consigo exibir todos os professores que o aluno já avaliou, mas o que eu quero é exatamente o contrário, ou seja, quero mostrar apenas os professores em que o aluno ainda não avaliou.
Utilizei o seguinte código para mostrar só os que foram avaliados pelo aluno
Tentei mudar a linha TC.CODPROF=TP.CODPROF para TC.CODPROF<>TP.CODPROF mas não funcionou (mostrou todos os prof)
Alguém sabe como se faz?
Valeu pela atenção
virtual
Tenho uma consulta que mostra todos os professores de um determinado aluno.
SELECT DISTINCT TP.CODPROF,TP.NOMEPROF,TD.DISCIPLINA FROM TBPROF TPR INNER JOIN TBPROFESSOR TP ON TPR.CODPROF=TP.CODPROF INNER JOIN TBDISCIPLINA TD ON TPR.CODDISC=TD.CODDISC WHERE TPR.CODTURMA= ( SELECT CODTURMA FROM TBTURMA WHERE TURMA =( SELECT TURMA FROM TBALUNO WHERE USUARIO =106094 ) )
Tenho também, uma tabela de controle onde insiro o código do aluno e o código do professor que aquele aluno avaliou.
OK
Para saber qual professor o aluno avaliou utilizo o código abaixo
SELECT CODPROF FROM TBCONTROLVOT WHERE USUARIO = 106094
Bom, consigo exibir todos os professores que o aluno já avaliou, mas o que eu quero é exatamente o contrário, ou seja, quero mostrar apenas os professores em que o aluno ainda não avaliou.
Utilizei o seguinte código para mostrar só os que foram avaliados pelo aluno
SELECT DISTINCT TP.CODPROF,TP.NOMEPROF,TD.DISCIPLINA FROM TBPROF TPR INNER JOIN TBPROFESSOR TP ON TPR.CODPROF=TP.CODPROF INNER JOIN TBDISCIPLINA TD ON TPR.CODDISC=TD.CODDISC INNER JOIN TBCONTROLVOT TC ON TC.CODPROF=TP.CODPROF WHERE TPR.CODTURMA= ( SELECT CODTURMA FROM TBTURMA WHERE TURMA =( SELECT turma from tbaluno where usuario =106094 ) )
Tentei mudar a linha TC.CODPROF=TP.CODPROF para TC.CODPROF<>TP.CODPROF mas não funcionou (mostrou todos os prof)
Alguém sabe como se faz?
Valeu pela atenção
virtual
Virtual7
Curtidas 0
Respostas
Daniela
09/07/2004
Veja
SELECT DISTINCT TP.CODPROF,TP.NOMEPROF,TD.DISCIPLINA FROM TBPROF TPR
INNER JOIN TBPROFESSOR TP ON TPR.CODPROF=TP.CODPROF
INNER JOIN TBDISCIPLINA TD ON TPR.CODDISC=TD.CODDISC
WHERE TPR.CODTURMA= ( SELECT CODTURMA FROM TBTURMA WHERE TURMA =( SELECT TURMA FROM TBALUNO WHERE USUARIO =106094 ) )
AND NOT EXISTS (SELECT CODPROF FROM TBCONTROLVOT WHERE USUARIO = 106094 AND TBCONTROLVOT.CODPROF = TP.CODPROF)
Como nao tenho as tabelas aqui criadas entao nao fiz um teste real, mas a ideia e essa procurar todos professores que nao exista na tabela ´subquery´.
SELECT DISTINCT TP.CODPROF,TP.NOMEPROF,TD.DISCIPLINA FROM TBPROF TPR
INNER JOIN TBPROFESSOR TP ON TPR.CODPROF=TP.CODPROF
INNER JOIN TBDISCIPLINA TD ON TPR.CODDISC=TD.CODDISC
WHERE TPR.CODTURMA= ( SELECT CODTURMA FROM TBTURMA WHERE TURMA =( SELECT TURMA FROM TBALUNO WHERE USUARIO =106094 ) )
AND NOT EXISTS (SELECT CODPROF FROM TBCONTROLVOT WHERE USUARIO = 106094 AND TBCONTROLVOT.CODPROF = TP.CODPROF)
Como nao tenho as tabelas aqui criadas entao nao fiz um teste real, mas a ideia e essa procurar todos professores que nao exista na tabela ´subquery´.
GOSTEI 0