- Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 5 meses atrás por rodrigo_scorsatto.
-
AutorPosts
-
28 de agosto de 2008 às 6:44 pm #82560rodrigo_scorsattoParticipante
meu BD:
create table DISCIPLINAS(
Disciplina char(8) primary key,
Denominacao char(50) not null,
Nivel numeric(2));create table ALUNOS(
Matricula numeric(8) primary key,
Nome char(25) not null,
Sexo char(1) not null,
Idade numeric(2) not null,
Curso char(5) not null);create table PROFESSORES(
Disciplina char(8) references DISCIPLINAS,
Turma char(3),
Ano_sem char(6),
Professor varchar (50) not null,
primary key(Disciplina, Turma, Ano_sem));create table HISTORICO(
Matricula numeric(8) references ALUNOS,
Disciplina char(8),
Turma char(3) not null,
Ano_sem char(6) not null,
Nota numeric(3,1) not null,
primary key(Matricula, Disciplina, Ano_sem),
foreign key(Disciplina, Turma, Ano_sem) references PROFESSORES);pessoal eu estou com uma duvida pra fazer uma consulta que pede o seguinte:
Nome, sexo e idade dos alunos e nome, sexo e idade de seus colegas, onde um aluno é
colega de outro quando, no mesmo ano_semestre, cursaram a mesma disciplina/turmaeu fiz essa query:
select distinct aluA.nome as “Nome Aluno”, aluA.sexo as “Sexo Aluno”, aluA.idade as “Idade Aluno”, aluB.nome as “Nome Colega”, aluB.sexo as “Sexo Colega”, aluB.idade as “Idade Colega” from alunos aluA
inner join historico hist on aluA.matricula=hist.matricula
inner join alunos aluB on aluA.matricula=aluB.matricula
eu fiz os joins mais meu problema é como eu vou comparar os colegas, eu não sei como fazer isso, alguem sabe?
28 de agosto de 2008 às 7:46 pm #82562IshiiParticipanteOlá,
Faltou relacionar as tabelas de disciplina e turma para que vc tenha toda a informação que precisa…
[]s Ishii
28 de agosto de 2008 às 7:49 pm #82563rodrigo_scorsattoParticipanteeu não tenho a tabela turma… o problema eh como eu vou comparar na tabela historico o aluno com ano_sem e turma = colega ano_sem e turma
entendeu?
28 de agosto de 2008 às 8:11 pm #82565rodfbarParticipanteola..
deixa eu ver se entendi
select aluno.nome, aluno.sexo, aluno.idade,colega.nome, colega.sexo, colega.idade
from aluno aluno
,historico hist_aluno
,historico hist_colega
,aluno colega
where hist_aluno.matricula = hist_colega.matricula
and hist_colega.Ano_sem = hist_aluno.Ano_sem(+)
and hist_colega.Disciplina = hist_aluno.Disciplina(+)
and hist_colega.Turma(+) = hist_aluno.Turma
and colega.matricula(+) = hist_colega.matricula
28 de agosto de 2008 às 8:17 pm #82566rodrigo_scorsattoParticipantesim eh assim mesmo, mais meu problema eh que eu tenho que usar inner join, mais acho que fica a mesma coisa, certo? valeu pela ajuda !
28 de agosto de 2008 às 8:21 pm #82567rodrigo_scorsattoParticipante[quote=”rodrigo_scorsatto”:hyl2umic]sim eh assim mesmo, mais meu problema eh que eu tenho que usar inner join, mais acho que fica a mesma coisa, certo? outra coisa o que significa isso (+) ? valeu pela ajuda ![/quote]
28 de agosto de 2008 às 8:37 pm #82568rodfbarParticipante(+) seria uma especie de outer join
talvez seria a mesma coisa de: ao invez de vc utilizar o “inner join” voce utilizasse o “left outer join”, coisa aparecida…
serve para trazer dados em uma tabela mesmo se estes dados nao existam na outra do join… como neste seu caso, por exemplo, pode ocorrer de nem todos os alunos terem colegas, ou nem sequer hitórico… mas mesmo assim voce faz ele retornar na consulta
abrçs
28 de agosto de 2008 às 8:42 pm #82569rodrigo_scorsattoParticipanteah entendi, bom nesse caso eu não vou usar então porque eu quero que retorne somente os colegas do aluno, se ele não tiver não deve retornar nada… valeu !
abraço !
-
AutorPosts
- Você deve fazer login para responder a este tópico.