Erro no SQL

Delphi

15/10/2004

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

Curtidas 0

Respostas

Paulo_amorim

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


GOSTEI 0
Gandalf.nho

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

Vinicius2k

15/10/2004

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+


GOSTEI 0
Sanzio

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

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


GOSTEI 0
POSTAR