Estou usando um servlet que faz a consulta em duas tabelas relacionadas. Minhas tabelas questao e alternativas estão relacionadas, onde meu cod-questao é a chave estrangeira da tabela alternativa.
Seleciono as questões pelo assunto, o qual é campo da tabela questão. Qdo tenho um determinado assunto, como por exemplo biologia este seleciona na tabela questao todas as que forem de biologia e vai buscar as alternativas daqueles códigos, porém as vezes tenho mais de uma questão com o mesmo assunto, ou seja, cod-questao diferentes e qdo dou o select dos códigos selecionados sobre o assunto biologia na tabela alternativa o select não volta buscar o outro cod-questao que tb foi selecionado na tabela questao.
Estou usando um servlet que faz a consulta em duas tabelas relacionadas. Minhas tabelas questao e alternativas estão relacionadas, onde meu cod-questao é a chave estrangeira da tabela alternativa.
Seleciono as questões pelo assunto, o qual é campo da tabela questão. Qdo tenho um determinado assunto, como por exemplo biologia este seleciona na tabela questao todas as que forem de biologia e vai buscar as alternativas daqueles códigos, porém as vezes tenho mais de uma questão com o mesmo assunto, ou seja, cod-questao diferentes e qdo dou o select dos códigos selecionados sobre o assunto biologia na tabela alternativa o select não volta buscar o outro cod-questao que tb foi selecionado na tabela questao.
Leily porque você não cria uma outra tabela para armazenar as informações referentes ao assunto(tipo) e relaciona a tabela questão com ela, e para recuperar o(s) registro(s) da tabela questão referente(s) a um assunto em específico o código SQL seria:
//recupera todas as questões de um determinado assunto
select qt.cod_questao,qt.texto_questao, ast.assunto from questao qt
inner join assunto ast on ast.cod_assunto = qt.cod_assunto
where
qt.cod_assunto = ?;
Com isso se os registro que existerem nas tabelas forem:
Tabela Assunto
==========================
cod_assunto | assunto |
--------------------------
1 | Biologia |
2 | Matemática|
==========================
Tabela Questão
==============================================================
cod_questao | cod_assunto | texto_questao |
==============================================================
1 | 1 | Qual é a família das Bromélias ?|
--------------------------------------------------------------
2 | 1 | O que estuda a Biologia ? |
===============================================================
select cod_alternativa, cod_questao, texto from alternativa
where
cod_questao = ?
Abaixo um esqueleto do código e da estrutura das tabelas
public Collection findByAssunto(int idAssunto) throws SQLException {
PreparedStatement pstm = null;
//recupere a conexão do Pool.
Connection conexao = null;
try {
pstm =
conexao.prepareStatement(
"select qt.cod_questao, qt.texto_questao, ast.assunto from questao qt "
+ " inner join assunto ast on ast.cod_assunto "
+ " qt.cod_assunto here qt.cod_assunto = ?");
pstm.setInt(1, idAssunto);
ResultSet res = pstm.executeQuery();
while (res.next()) {
//selecione todas as alternativas relacionadas a questão
pstm = conexao.prepareStatement("select cod_alternativa, cod_questao, texto from alternativa where cod_questao = ?");
pstm.setInt(1, res.getInt("cod_questao"));
}
} finally {
if (pstm != null) {
pstm.close();
}if(conexao != null){
conexao.close();
}
} return null;
}
create table assunto(
cod_assunto int(10) not null,
assunto varchar(30) not null,
constraint pk_assunto primary key(cod_assunto)
);
drop table if exists questao;
create table questao(
cod_questao integer not null,
cod_assunto integer not null,
texto_questao varchar(100) not null,
constraint pk_questao primary key(cod_questao),
constraint fk_qst_ass foreign key(cod_assunto) references assunto(cod_assunto)
);
create table alternativa(
cod_alternativa integer not null,
cod_questao integer not null,
texto varchar(100) not null,
constraint pk_alter primary key(cod_alternativa),
constraint fk_alter_qst foreign key(cod_questao) references questao(cod_questao)
)