Erro no SQL
Boa Tarde,
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
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
Curtidas 0
Respostas
Paulo_amorim
15/10/2004
Olá
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é+
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
Gandalf.nho
15/10/2004
Ele está dizendo que a subquery está retornando mais de uma linha. Qual o banco de dados que você está usando?
GOSTEI 0
Vinicius2k
15/10/2004
Colega,
À 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+
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
Sanzio
15/10/2004
Olá
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é+
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
Paulo_amorim
15/10/2004
Olá
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é+
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