Fórum Erro no SQL #254589
15/10/2004
0
Estou tendo um erro ao executar o sql a seguir para gerar um relatório de boletim escolar e me retorna a seguinte mensagem, gostaria de verificar se há algum erro na sintaxe de acordo com a mensagem exibida
SQL
select tb_monta_turma.turno, tb_notas.cod_aluno, tb_notas.cod_turma, tb_notas.cod_materia, tb_notas.num_aluno,
tb_clientes.codigo, tb_clientes.nome, tb_define_modulos.novo_codigo, tb_matricula.cod_tur_mont,
tb_matricula.numero, (select tb_notas.nota_n from tb_notas where num_per = :NPer1), (select tb_notas.nota_n from tb_notas where num_per = :NPer2), (select tb_notas.nota_n from tb_notas where num_per = :NPer3), (select tb_notas.nota_n from tb_notas where num_per = :NPer4)
from tb_notas, tb_monta_turma, tb_clientes, tb_matricula, tb_define_modulos where (tb_notas.cod_turma = :CodT) and (tb_notas.cod_aluno = :PCOdA)
ERRO Single row subquery produced more than one row
Obrigado pela ajuda,
Sanzio F. C. Amora
InforPlay Informatica
Sanzio
Curtir tópico
+ 0Posts
15/10/2004
Paulo_amorim
As suas subqueries não podem retornar mais de um registro senão fica incoerente o ResultSet...
Como elas são tratadas como campos da sua query elas devem, como todo campo, ter somente um valor por registro (linha)
Assim, tente colocar parâmetros (às vezes os mesmos parâmetros da query principal funcionam) de modo a restringir os resultados das subqueries a um só registro
Se precisar de ajuda, posta ae que a gente tenta :D
Espero que ajude
Até+
Gostei + 0
15/10/2004
Gandalf.nho
Gostei + 0
15/10/2004
Vinicius2k
select tb_monta_turma.turno, tb_notas.cod_aluno, tb_notas.cod_turma, tb_notas.cod_materia, tb_notas.num_aluno, tb_clientes.codigo, tb_clientes.nome, tb_define_modulos.novo_codigo, tb_matricula.cod_tur_mont, tb_matricula.numero, (select tb_notas.nota_n from tb_notas where num_per = :NPer1), (select tb_notas.nota_n from tb_notas where num_per = :NPer2), (select tb_notas.nota_n from tb_notas where num_per = :NPer3), (select tb_notas.nota_n from tb_notas where num_per = :NPer4) from tb_notas, tb_monta_turma, tb_clientes, tb_matricula, tb_define_modulos where (tb_notas.cod_turma = :CodT) and (tb_notas.cod_aluno = :PCOdA)
À principio não vejo nenhum erro, mas o o problema *provavelmente* está nas 4 colunas vindas de sub-selects... Elas só podem retornar um único registro para preencher a coluna, mas podem estar retornando mais de um devido aos dados contidos na base...
Vc vai precisar verificar se executando as sub-selects como selects independentes e informando o mesmo parametro, se elas estão retornando mais de um registro...
T+
Gostei + 0
15/10/2004
Sanzio
Pelo que entendi, nesta seleçao de campo ele esta selecionando mais de 1 registro
(select tb_notas.nota_n from tb_notas where num_per = :NPer1)
entao deverei colocar outros parametros afim de que seja gerado apenas um registro apenas?
Sanzio F. C. Amora
InforPlay Informatica
[b:cb82caee40]Tópico editado.[/b:cb82caee40]
Sanzio, não utilize fontes grandes para escrever sua mensagem; dá a impressão que está gritando.
Sandra/Moderação
Gostei + 0
15/10/2004
Paulo_amorim
Sim, exatamente isso. Como disse o 2k, realize essas subqueries em separado, passando o parâmetro atual, e veja qual o resultado. Se obtiver mais de um resultado, aí está o problema.
Para diminuir os registros, utilize outro(s) parametro(s).
Que letra pequena en :wink:
Até+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)