DUVIDA NO RETORNO DOS DADOS

JUNIORARI2 06/01/2011 15:23:26
#361396
E ae galera, alguem pode me ajudar.. seguinte:

tenho duas tabelas:
======================
__________aluno_________
id nome ...
1 Jose
2 Maria
3 Joaquim
4 Manoel

======================
________turmas________
id userid idtipo
1 1 1 => Administrador
2 1 2 => Aluno
3 1 4 => Tutor
4 2 2
5 2 3 => Secretária
6 3 2
7 4 3



queria mostrar todos os alunos que fizessem relacao com a tabela turmas e nao fosse com o idtipo igual a 1 (porque o idtipo 1 é administrador, mas pode ser aluno e/ou tutor tambem, mas como ele é administrador nao poderá mostrar ele)

eu fiz assim:
SELECT distinct a.id, a.nome, t.idtipo FROM aluno a, turmas t INNER JOIN aluno a on a.id = t.idtipo WHERE t.idtipo <> 1

o problema é que está me retornando dados duplicados, assim:
id nome idtipo
1 Jose 2
1 Jose 4
2 Maria 2
2 Maria 3
3 Joaquim 2
4 Manoel 3

e não é isso que eu quero... eu quero que me retorne todos os alunos, mas se na tabela turma esse aluno tiver um registro marcado com o idtipo 1 nao quero que me retorne esse aluno.

estou usando o MySQL e VB

alguem pode me dar uma luz....
PARREIRA 06/01/2011 15:28:50
#361398
SELECT distinct a.id, a.nome, t.idtipo FROM aluno a, turmas t INNER JOIN aluno a on a.id = t.iduser WHERE t.idtipo <> 1
Tenta assim.
SURI 06/01/2011 15:36:02
#361401
Tente isso:

Select aluno.?, aluno.?, turma.?, Turma.? Idtipo.? from aluno inner join turma on aluno.id=turma.id left join IDtipo on aluno.ID=IDtipo.id where idtipo (critério)


? = dado pretendido


Se estiver falhando dêm uma olhadela nas joins

na tabela IDtipo também deve ter um campo que identifique o IDaluno para que a join funcione!
JUNIORARI2 06/01/2011 15:37:09
#361402
ja tentei assim tambem, mas continua me retornando o aluno duplicado, ...
pois na tabela turma existe registro dele com outros tipos, entao a consulta me retorna esses tipos
FEDERHEN 06/01/2011 16:19:42
#361410
Resposta escolhida
Deve ser isso...

SELECT T1.ID, A1.NOME,T1.IDTIPO
FROM TURMAS AS T1, ALUNO AS A1
WHERE T1.USERID=A1.ID
AND (SELECT COUNT(*) FROM TURMAS AS T2 WHERE T1.USERID=T2.USERID AND IDTIPO=[ô]1[ô])=0;

Resultado:
ID NOME IDTIPO
4 Maria 2
5 Maria 3
6 Joaquim 2
7 Manoel 3


PARREIRA 06/01/2011 16:21:58
#361411
SELECT distinct a.nome FROM aluno a, turmas t INNER JOIN aluno a on a.id = t.iduser WHERE t.idtipo <> 1
Tenta assim.

para usar o distinct use somente o campo a.nome na consulta que vai dar certo.
JUNIORARI2 26/01/2011 13:51:38
#363487
Citação:

:
Deve ser isso...

SELECT T1.ID, A1.NOME,T1.IDTIPO
FROM TURMAS AS T1, ALUNO AS A1
WHERE T1.USERID=A1.ID
AND (SELECT COUNT(*) FROM TURMAS AS T2 WHERE T1.USERID=T2.USERID AND IDTIPO=[ô]1[ô])=0;

Resultado:
ID NOME IDTIPO
4 Maria 2
5 Maria 3
6 Joaquim 2
7 Manoel 3





valeu cara, desse seu exemplo eu consgui fazer o ue queria, ficou assim:

SELECT DISTINCT T1.ID, A1.NOME,T1.IDTIPO FROM TURMAS AS T1 INNER JOIN ALUNO AS A1 ON T1.userid = A1.id WHERE T1.idtipo = 2 AND T1.userid NOT IN(SELECT userid FROM turmas WHERE idtipo=1)
Tópico encerrado , respostas não são mais permitidas