Ir para conteúdo

Arquivado

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

Henrique Caldeira

Erro estranho: Subquery returned more than 1 value.

Recommended Posts

oq significa esse erroServer: Msg 512, Level 16, State 1, Line 1Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falai Henrique beleza,

 

entaum esse erro ae significa que uma sub-query retornou mais de um valor e isto não é permitido no local onde esta sub-query esta sendo utilizada

 

exemplo, coloquei uma sub-query(subselect) para listar a coluna productID da tabela Order Details, só que sta tabela é N-1 para a tabela Orders, desta forma vai retornar mais que um valor no sub-select, entaum vai ocorrer o erro 512

use northwind;
select top 10 CustomerID, (select ProductID from [order details] where OrderID = O.OrderID) as subquery from [orders] O

 

o mesmo exemplo, só que desta vez coloquei o top 1 só pra trazer o 1° registro que encontrar, desta forma naum vai dar erro, pois sempre o sub-select vai trazer 1 registro, se essas duas tabelas fossem 1-1 naum teria necessidade o top 1, ou então se tivessemos feito um sub-select que retornasse no máximo uma linha para cada consulta, por exemplo um select de contagem (COUNT) ou somatória (SUM)

use northwind;
select top 10 CustomerID, (select top 1 ProductID from [order details] where OrderID = O.OrderID) as subquery from [orders] O

 

caso tiver mais dúvidas posta ae o comando que tu ta utilizando.

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

select TPRD.NOMEFANTASIA from tprd inner join titmmov on TPRD.CODCOLIGADA = TITMMOV.CODCOLIGADA and TPRD.IDPRD = TITMMOV.IDPRD where titmmov.idmov = (select tmov.idmov from titmmov inner join tmov on TITMMOV.CODCOLIGADA = TMOV.CODCOLIGADA and TITMMOV.IDMOV = TMOV.IDMOV where tmov.numeromov = (select substring(flan.numerodocumento,1,6) from flan where numerodocumento = '04105301'))dessa forma ele retorna o valor desejado...mais eu preciso de por as restrições tipocodfilial = 1 and(datavencimento >= :dataini and datavencimento >= :datafim)dai da esse erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

neste dois trechos podem ocorrer o erro 512:

- where titmmov.idmov = (select tmov.idmov

- where tmov.numeromov = (select substring(flan.numerodocumento,1,6)

isto pq. no caso o operador = vai esperar receber uma linha e nestes selects podem ocorrer mais de uma linha

 

duas formas de resolver isto:

1 - colocar um top 1 no sub-select

- where titmmov.idmov = (select top 1 tmov.idmov

- where tmov.numeromov = (select top 1 substring(flan.numerodocumento,1,6)

OBS.: com isso só vai pesquisar no primeiro registro encontrado

 

2 - trocar o operador = pelo operador in

- where titmmov.idmov in (select tmov.idmov

- where tmov.numeromov in (select substring(flan.numerodocumento,1,6)

OBS.: com isso vai pesquisar em todos os registros encontrados

 

 

t++

Compartilhar este post


Link para o post
Compartilhar em outros sites

putiz cara usei o in e deu certinho como eu queria...agora queria usar a estriçãoand datavencimento >= :dataini and datavencimento <= :datafimServer: Msg 170, Level 15, State 1, Line 12Line 12: Incorrect syntax near ':'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais o que são estes dois pontos ( : ) ae, acho q é só tirar eles dai, ou tem algo pra você ter colocado eles, é q nunca vi esses : ae, se for parametros naum seria o arroba ( @ ), ex. @dataini

 

outra forma de consultar entre valores é com o between

and datavencimento between @dataini and @datafim

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera sou novo aqui!!!!

Já vou direto ao assunto, queria saber se tem como eu trazer dois registros em uma SubSelect????

No caso a SubSelect vira um campo quando eu renomeio.

Eu so queria saber se tem como Retornar dois valores na mesma SubSelect.

agradeço desde já.

Estou no aguardo....... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera sou novo aqui!!!!Já vou direto ao assunto, queria saber se tem como eu trazer dois registros em uma SubSelect????No caso a SubSelect vira um campo quando eu renomeio.Eu so queria saber se tem como Retornar dois valores na mesma SubSelect.agradeço desde já.Estou no aguardo....... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

o sub-select só pode ter um registro para cada linha do select

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa.. alguem pode me dar uma luz.. estou com esse mesmo problema...

 

Select

e.codigo, e.valor, nf.valor,

(Select SUM(nf.valor) From NotaFiscal

where nf.mes <= nf.mes and nf.empenho_codigo = e.codigo) AS Acumulado,

e.valor - ISNULL(

(Select SUM (nf.valor) from NotaFiscal

where nf.mes <= nf.mes and nf.empenho_codigo = e.codigo),0) as Saldo

From Empenho E, NotaFiscal nf

where e.codigo = nf.empenho_codigo

GROUP BY e.codigo, e.valor, nf.valor, nf.mes, nf.empenho_codigo

 

CREATE TABLE Empenho(Codigo Int, Contrato_Codigo int, Modalidade_Codigo int , Numero varchar(20), Valor money, Data Datetime)

CREATE TABLE NotaFiscal(Codigo int, Empenho_Codigo int (FK), Numero varchar(20), Mes int, Data datetime)

 

Como que faço para aparecer mais registros entao, se a subconsulta so retorna um? essa minha consulta so funciona se houver apenas um registro, qual a forma de fazer com quem apareçam todos?

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.