Fórum Erro no SQL #254589

15/10/2004

0

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


Sanzio

Sanzio

Responder

Posts

15/10/2004

Paulo_amorim

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é+


Responder

Gostei + 0

15/10/2004

Gandalf.nho

Ele está dizendo que a subquery está retornando mais de uma linha. Qual o banco de dados que você está usando?


Responder

Gostei + 0

15/10/2004

Vinicius2k

Colega,
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+


Responder

Gostei + 0

15/10/2004

Sanzio

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


Responder

Gostei + 0

15/10/2004

Paulo_amorim

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é+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar