Ir para conteúdo

POWERED BY:

Arquivado

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

Rijndael

Problemas com SQL

Recommended Posts

:angry: Pessoal segue o meu problema que esta me tirando o sono, quem puder cooperar ... postando uma solucao , sera bem vindo ... Bom ... vamos la Tenho 3 tbl´s; cursos,disciplinas e grades.estou tentando montar uma grade que possua: codigo do curso, codigo da disciplina, codigo da disciplina de pre requisito, periodo e carga horaria.Abaixo uma demonstracao dos esquemas das tbl;CREATE TABLE cursos ( cod serial, nome varchar);INSERT INTO cursos (cod,nome) VALUES ('1','ADMINISTRACAO'); INSERT INTO cursos (cod,nome) VALUES ('2','TURISMO'); CREATE TABLE disciplinas ( cod serial, nome varchar);INSERT INTO disciplinas (cod,nome) VALUES ('1','PORTUGUES I'); INSERT INTO disciplinas (cod,nome) VALUES ('2','PORTUGUES II'); INSERT INTO disciplinas (cod,nome) VALUES ('3','MATEMATICA I'); INSERT INTO disciplinas (cod,nome) VALUES ('4','MATEMATICA II'); CREATE TABLE grades ( cod serial, cod_curso int, cod_disciplina int, cod_disciplina_req int, periodo int, carga_horaria int);INSERT INTO grades (cod_curso,cod_disciplina,cod_disciplina_req,periodo,carga_horaria) VALUES ('1','1','0','1','80');INSERT INTO grades (cod_curso,cod_disciplina,cod_disciplina_req,periodo,carga_horaria) VALUES ('1','3','0','1','80');INSERT INTO grades (cod_curso,cod_disciplina,cod_disciplina_req,periodo,carga_horaria) VALUES ('1','2','1','2','80');INSERT INTO grades (cod_curso,cod_disciplina,cod_disciplina_req,periodo,carga_horaria) VALUES ('1','4','2','2','80');A Syntax para selecionar a grade sem as materias de pre requisito:SELECT grades.periodo, cursos.nome AS Curso, disciplinas.nome AS Disciplinas, grades.carga_horaria FROM cursos, disciplinas, grades WHERE cursos.cod = grades.cod_curso AND disciplinas.cod = grades.cod_disciplina AND periodo = '1' AND grades.cod_curso = '1';Resultado: periodo | curso | disciplinas | carga_horaria ---------+---------------+--------------+--------------- 1 | ADMINISTRACAO | PORTUGUES I | 80 1 | ADMINISTRACAO | MATEMATICA I | 80(2 registros)Agora quanto tento selecionar com as disciplinas de pre-requisito;SELECT grades.periodo, cursos.nome AS Curso, disciplinas.nome AS Disciplinas, grades.carga_horaria, disciplinas.nome AS Pre_Requisito FROM cursos, disciplinas, grades WHERE cursos.cod = grades.cod_curso AND disciplinas.cod = grades.cod_disciplina AND periodo = '1' AND grades.cod_curso = '1' AND grades.cod_disciplina_req = disciplinas.cod;O Resultado :( periodo | curso | disciplinas | carga_horaria | pre_requisito ---------+-------+-------------+---------------+---------------(0 registros)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rijndael,há pelo menos 2 coisas a observar:1 - No último SELECT está presente a instrução:

AND periodo = '1'

Isso fará com que as disciplinas que têm pré-requisito não apareçam, pois PERIODO=2;2 - No mesmo SELECT, há 2 instruções conflitantes:

AND disciplinas.cod = grades.cod_disciplina

e logo a seguir:

AND grades.cod_disciplina_req = disciplinas.cod

Nesse caso, só listaria se GRADES.COD_DISCIPLINA_REQ = DISCIPLINAS.COD = GRADES.COD_DISCIPLINA, o que nunca ocorrerá, pois uma disciplina não pode ter a ela própria como pré-requisito.A solução dependerá do que você precisa. Se você pretende visualizar o NOME DA DISCIPLINA e o NOME DA DISCIPLINA DE PRÉ-REQUISITO, você terá que usar 2x a tabela DISCIPLINAS no FROM, assim:... FROM disciplinas d1, disciplinas d2e no WHERE associar:... WHERE d1.cod = grades.cod_disciplina AND grades.cod_disciplina_req = d2.codSucesso!EnioManaus - AM

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Falewwww Enio !!!!

 

Um Remendo Antes :)

 

DELETE FROM GRADES;

INSERT INTO grades (cod_curso,cod_disciplina,cod_disciplina_req,periodo,carga_horaria) VALUES ('1','1','0','1','80');

INSERT INTO grades (cod_curso,cod_disciplina,cod_disciplina_req,periodo,carga_horaria) VALUES ('1','3','0','1','80');

INSERT INTO grades (cod_curso,cod_disciplina,cod_disciplina_req,periodo,carga_horaria) VALUES ('1','2','1','2','80');

INSERT INTO grades (cod_curso,cod_disciplina,cod_disciplina_req,periodo,carga_horaria) VALUES ('1','4','3','2','80');

 

Agora o SQL fica assim ->

 

SELECT grades.periodo, cursos.nome AS Curso, disciplinas.nome AS Disciplinas, grades.carga_horaria, disc_req.nome AS pre_requisito

FROM cursos, disciplinas, disciplinas disc_req, grades

WHERE cursos.cod = grades.cod_curso

AND disciplinas.cod = grades.cod_disciplina AND periodo = '2'

AND grades.cod_curso = '1'

AND grades.cod_disciplina_req = disc_req.cod;

 

O Resultado : :D

 

periodo | curso | disciplinas | carga_horaria | pre_requisito

---------+---------------+---------------+---------------+---------------

2 | ADMINISTRACAO | PORTUGUES II | 80 | PORTUGUES I

2 | ADMINISTRACAO | MATEMATICA II | 80 | MATEMATICA I

(2 registros)

 

Falew mesmo enio ... era so eu puxar da mesma tabela com 'nome' diferentes para nao 'confundir' o banco :) Agora , sem problemas

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.