Ir para conteúdo

Arquivado

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

Glauber Victor

Select com tres tabelas

Recommended Posts

Olá estou tendo um problema com o resultado da clausula sql abaixo:SELECT DISTINCT(ALUNOS.NOMEALUNO), NOTAS.CODALUNO, NOTAS.SEMESTRE, NOTAS.TURMAFROM NOTAS, NOTASONLINE INNER JOIN ALUNOS ON NOTAS.CODALUNO = ALUNOS.CODALUNOWHERE NOTAS.SEMESTRE = '2006/1' AND NOTAS.TURMA ='A1/AN' AND ALUNOS.CONTROLE = '1' AND NOTASONLINE.BAIXA <> '1'Eu gostaria que me retornasse os valores da tabela principal "NOTAS" e não o resultado da tabela "NOTASONLINE" isso pesquisando na tabela NOTASONLINE se houver registro, não mostrar na tabela NOTAS.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um inner com a tabela NOTASONLINE, assim como foi feito o inner com a tabela ALUNOS

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um inner com a tabela NOTASONLINE, assim como foi feito o inner com a tabela ALUNOS

Eu já fiz isso dá o mesmo problemaSELECT DISTINCT(ALUNOS.NOMEALUNO), NOTAS.CODALUNO, NOTAS.SEMESTRE, NOTAS.TURMA, NOTASONLINE.BAIXAFROM NOTASONLINE INNER JOIN (NOTAS INNER JOIN ALUNOS ON NOTAS.CODALUNO = ALUNOS.CODALUNO) ON NOTASONLINE.CODALUNO = NOTAS.CODALUNOEle está imprimindo o resultado da tabela NOTASONLINE eu quero o resultado da tabela NOTAS, subtraindo aqueles alunos que estão como o valor "BAIXA = 1" da tabela NOTASONLINE

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta fazer assim:

 

SELECT DISTINCT(ALUNOS.NOMEALUNO), NOTAS.CODALUNO, NOTAS.SEMESTRE, NOTAS.TURMAFROM NOTAS--, NOTASONLINE  <--TIRA DAKIINNER JOIN ALUNOS ON NOTAS.CODALUNO = ALUNOS.CODALUNOINNER JOIN NOTASONLINE ON NOTAS.CODALUNO = NOTASONLINE.CODALUNO --COLOCAR AQUIWHERE NOTAS.SEMESTRE = '2006/1' AND NOTAS.TURMA ='A1/AN' AND ALUNOS.CONTROLE = '1' AND NOTASONLINE.BAIXA <> '1'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu mas ainda não é o que eu queria.

tenta fazer assim:

SELECT DISTINCT(ALUNOS.NOMEALUNO), NOTAS.CODALUNO, NOTAS.SEMESTRE, NOTAS.TURMAFROM NOTAS--, NOTASONLINE  <--TIRA DAKIINNER JOIN ALUNOS ON NOTAS.CODALUNO = ALUNOS.CODALUNOINNER JOIN NOTASONLINE ON NOTAS.CODALUNO = NOTASONLINE.CODALUNO --COLOCAR AQUIWHERE NOTAS.SEMESTRE = '2006/1' AND NOTAS.TURMA ='A1/AN' AND ALUNOS.CONTROLE = '1' AND NOTASONLINE.BAIXA <> '1'
Tentei desta forma ainda:SELECT DISTINCT ALUNOS.NOMEALUNO, NOTAS.CODALUNO, NOTAS.SEMESTRE, NOTAS.TURMAFROM NOTAS, ALUNOS, NOTASONLINEWHERE NOTAS.CODALUNO = ALUNOS.CODALUNO AND NOTAS.CODALUNO = NOTASONLINE.CODALUNO AND (NOTAS.SEMESTRE = '2006/1') AND (NOTAS.TURMA = 'A1/AN') AND (ALUNOS.CONTROLE = 1)Mas aparece só os alunos que já foram dados baixas eu quero o inverso disso ou seja só apareçam alunos da tabela NOTAS ainda que não foram dadas baixas.Ele busca na tabela NOTAS todos os alunos e mostra nesta tabela ALUNOS apenas alunos que não foram dados baixas da tabela NOTASONLINE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se funciona...

você vai trabalhar com subquerys... eh q teria q conhecer as tabelas.. saber as q podem não ter informações.. mas vamos tentar:

SELECT * FROM(SELECT    DISTINCT a.nomealuno, n.codaluno,  n.semestre, n.turmaFROM alunos A   LEFT OUTER JOIN notas N ON n.codaluno = alunos.codaluno -- ou inner join.. não sei se todos os alunos sempre tem registros nessa tabela   LEFT OUTER JOIN notasonline no ON n.codaluno = no.codaluno -- essa é a tabela q pode não ter nota?WHERE n.semestre = '2006/1' AND n.turma = 'A1/AN' AND a.controle = 1)WHERE algum_campo IS NULL -- corrigir
mas agora você tem q aprimorar conforme seu conhecimento das tabelas.. q campo vai vir nulo, ou zero... beleza?

 

veja se da certo ai...

;)

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.