Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Dagma Collela

Erro sub consulta retorna mais de 1 linha

Recommended Posts

Galera estou tentando fazer uma consulta no mysql, Utilizando worbench, mas to com esse error, como sou novato mexendo com DB, então tentei varias coisas, mas sem sucesso.

Error code: 1242 Suby Query Returns more than 1 row.

 

SELECT
(SELECT nomeDiciplina FROM diciplina AS tbDiciplina WHERE tbDiciplina.codDiciplina = tbavaliacaoparcial.codDiciplina) As diciplinaDescricao,
(
SELECT notaConceito
FROM avaliacaoparcial As tbavaliacaoparcialSub
WHERE tbavaliacaoparcialSub.codDiciplina = tbavaliacaoparcial.codDiciplina
AND tbavaliacaoparcialSub.anoLetivo = tbavaliacaoparcial.anoLetivo
AND tbavaliacaoparcialSub.codAluno = tbavaliacaoparcial.codAluno
AND tbavaliacaoparcialSub.avaliacaoparcialcol = 'PG-01'
) As PG01,
(
SELECT notaConceito
FROM avaliacaoparcial As tbavaliacaoparcialSub
WHERE tbavaliacaoparcialSub.codDiciplina = tbavaliacaoparcial.codDiciplina
AND tbavaliacaoparcialSub.anoLetivo = tbavaliacaoparcial.anoLetivo
AND tbavaliacaoparcialSub.codAluno = tbavaliacaoparcial.codAluno
AND tbavaliacaoparcialSub.avaliacaoparcialcol = 'PG-05'
) As PG05,
(
SELECT notaConceito
FROM avaliacaoparcial As tbavaliacaoparcialSub
WHERE tbavaliacaoparcialSub.codDiciplina = tbavaliacaoparcial.codDiciplina
AND tbavaliacaoparcialSub.anoLetivo = tbavaliacaoparcial.anoLetivo
AND tbavaliacaoparcialSub.codAluno = tbavaliacaoparcial.codAluno
AND tbavaliacaoparcialSub.avaliacaoparcialcol = 'PROVA GERAL 1'
) As PGERAL1,
(
SELECT notaConceito
FROM avaliacaoparcial As tbavaliacaoparcialSub
WHERE tbavaliacaoparcialSub.codDiciplina = tbavaliacaoparcial.codDiciplina
AND tbavaliacaoparcialSub.anoLetivo = tbavaliacaoparcial.anoLetivo
AND tbavaliacaoparcialSub.codAluno = tbavaliacaoparcial.codAluno
AND tbavaliacaoparcialSub.avaliacaoparcialcol = 'PROVA GERAL 5'
) As PGERAL5,
(
SELECT notaConceito
FROM avaliacaoparcial As tbavaliacaoparcialSub
WHERE tbavaliacaoparcialSub.codDiciplina = tbavaliacaoparcial.codDiciplina
AND tbavaliacaoparcialSub.anoLetivo = tbavaliacaoparcial.anoLetivo
AND tbavaliacaoparcialSub.codAluno = tbavaliacaoparcial.codAluno
AND tbavaliacaoparcialSub.avaliacaoparcialcol = 'PROVA MENSAL'
) As PMENSAL,
(
SELECT notaConceito
FROM avaliacaoparcial As tbavaliacaoparcialSub
WHERE tbavaliacaoparcialSub.codDiciplina = tbavaliacaoparcial.codDiciplina
AND tbavaliacaoparcialSub.anoLetivo = tbavaliacaoparcial.anoLetivo
AND tbavaliacaoparcialSub.codAluno = tbavaliacaoparcial.codAluno
AND tbavaliacaoparcialSub.avaliacaoparcialcol = 'PONTO DE TRABALHO'
) As PTRABALHO
FROM avaliacaoparcial AS tbavaliacaoparcial
WHERE tbavaliacaoparcial.anoLetivo = '2014' AND tbavaliacaoparcial.codAluno = '00247-0'
GROUP BY codDiciplina
ORDER BY diciplinaDescricao, avaliacaoparcialcol;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece que você esta fazendo um select dentro de outro select, isso se chama subselect

mas esses subselects só podem retornar no máximo uma linha, neste seu subselect ele traz mais de uma linha então por isso da o erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duro é isso com outras tabelas do meu db, essas sub-consulta funciono certinho, mas essa dai ta dano trabaho, alguem teria uma dica de como arrumar isso, pois nesse caso ai, máximo que consigo fazer de comparação são esses ai. CODALUNO CODISCIPLINA, ANOLETIVO. se alguém tiver uma solução, Agradeço de verdade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que vi da query acho usando CASE resolveria, mas como vc disse que não conhece bem SQL complica um pouco de explicar.

 

Não sei se o worbench permite montar query com CASE;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, esses dias eu dei umas estudada no Case, pra tentar resolver meu problema, o pouco que entendi dele, eu fiz, e o mesmo erro acontece. vou postar o pedaço que fiz pra teste no CASE

 

SELECT
(SELECT nomeDiciplina FROM diciplina AS tbDiciplina WHERE tbDiciplina.codDiciplina = tbavaliacaoparcial.codDiciplina) As diciplinaDescricao,
(
select case notaConceito
when tbavaliacaoparcial.avaliacaoparcialcol then 'PG-01'
when tbavaliacaoparcial.codDiciplina then tbavaliacaoparcialsub.codDiciplina
when tbavaliacaoparcial.codAluno then tbavaliacaoparcialsub.codAluno
when tbavaliacaoparcial.anoLetivo then tbavaliacaoparcialsub.anoLetivo
End as status
from avaliacaoparcial as tbavaliacaoparcialsub
) as pg01
FROM avaliacaoparcial AS tbavaliacaoparcial
WHERE tbavaliacaoparcial.anoLetivo = '2014' AND tbavaliacaoparcial.codAluno = '00247-0'
GROUP BY codDiciplina
ORDER BY diciplinaDescricao, avaliacaoparcialcol;
Esse erro ta me enlouquecendo, se alguem souber outra maneira de eu resolver por favor, ha motta verifica que estou usando case errado, obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tente algo assim ...
SELECT

case notaConceito

when tbavaliacaoparcial.avaliacaoparcialcol then 'PG-01'
when tbavaliacaoparcial.codDiciplina then tbavaliacaoparcialsub.codDiciplina
when tbavaliacaoparcial.codAluno then tbavaliacaoparcialsub.codAluno
when tbavaliacaoparcial.anoLetivo then tbavaliacaoparcialsub.anoLetivo
End) as pg01
FROM avaliacaoparcial AS tbavaliacaoparcial
WHERE tbavaliacaoparcial.anoLetivo = '2014' AND tbavaliacaoparcial.codAluno = '00247-0'
GROUP BY codDiciplina
ORDER BY diciplinaDescricao, avaliacaoparcialcol;

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sim deu certinho, so não da certo se eu por todos as notas que quero, pq eu pra mesma materia eu tenho varios "pontos de trabalhos", mas isso agora e outra coisa obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.