Ir para conteúdo

POWERED BY:

Arquivado

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

Ronaldo Marcos

Problemas usando NOT IN

Recommended Posts

Olá, vou resumir o que está acontecendo:

 

Tenho duas tabelas: sisaula_turmal e sisaula_nota

 

Essas tabelas tem os seguinte campos em comum: cod_aluno e cod_turma

 

O registro cod_turma que estou filtrando em cada uma delas é '4'

 

Existem os seguintes registros em cada tabela para cod_aluno:

 

sisaula_turmal :

cod_aluno: 41 e 44

 

sisaula_nota :

cod_aluno: 41

 

OK, o que quero é fazer um SELECT e listar apenas os que são diferentes entre as duas tabelas, que no caso o registro cod_aluno = 44.

 

Se eu faço o select apenas em sisaula_turmal que seria este:

 

SELECT cod_aluno FROM sisaula_turmal WHERE cod_turma = '4'

 

ele retornar corretamente os dois 41 e 44 que tem o cod_turma 4.

 

Se eu faço o select apenas em sisaula_nota que seria este:

 

SELECT cod_aluno FROM sisaula_nota WHERE cod_turma = '4'

 

ele retorna corretamente apenas 41 que tem o cod_turma 4.

 

Mas, quando tento usar NOT IN para selecionar apenas o que é diferente entre eles, no caso:

 

SELECT cod_aluno FROM sisaula_turmal WHERE cod_turma = '4' NOT IN (SELECT cod_aluno FROM sisaula_nota WHERE cod_turma = '4')

 

ele retorna o registro cod_aluno 43 de cod_turma 1, registro com campos que não tem nada a ver com o que esta no select.

 

Se alguém souber me disser onde estou errando ou outro método que me de o mesmo resultado em MYSQL e ASP eu agradeço.

 

Ronaldo Marcos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

 

SELECT t.cod_aluno FROM sisaula_turmal t 
INNER JOIN sisaula_nota n ON t.cod_aluno=n.cod_aluno
WHERE t.cod_turma = '4' AND t.cod_turma NOT IN (SELECT cod_aluno FROM sisaula_nota WHERE cod_turma = '4')

 

 

Sei não se funciona, mas tente.

Nã to com mysql aqui pra testar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

 

SELECT t.cod_aluno FROM sisaula_turmal t 
INNER JOIN sisaula_nota n ON t.cod_aluno=n.cod_aluno
WHERE t.cod_turma = '4' AND t.cod_turma NOT IN (SELECT cod_aluno FROM sisaula_nota WHERE cod_turma = '4')

 

 

Sei não se funciona, mas tente.

Nã to com mysql aqui pra testar.

Obrigado, mas não deu, acredito que o "AND t.cod_turma NOT IN ..." que você informou seria o seguinte "AND t.cod_aluno NOT IN...", de qualquer forma ele retornou 41 e da forma que mandou e trocando por t.cod_aluno ficou vazio. Vou tentar ser uma pouco mais claro:

 

tenhos 02 tabelas: na de turmas eu tenho o cod_aluno 41 e 44 e na de notas eu tenho apenas o 41... eu quero que ele compare as duas e retorne o 44 que esta faltando em notas. Em comum elas tem o cod_turma = '4'.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT cod_aluno FROM sisaula_turmal WHERE cod_turma = '4' and cod_aluno NOT IN (SELECT cod_aluno FROM sisaula_nota WHERE cod_turma = '4')

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT cod_aluno FROM sisaula_turmal WHERE cod_turma = '4' and cod_aluno NOT IN (SELECT cod_aluno FROM sisaula_nota WHERE cod_turma = '4')

PERFEITO, incrivelmente eu tinha feito outros SELECTS parecidos e nao tinha caido na real que estava faltando o campo para comparar. Agradeço a todos, especialmente a Giesta.

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.