Usuário com melhor resposta
Update baseado em um select

Pergunta
-
Respostas
-
-
Boa Tarde,
Se é a mesma tabela, acho que o código poderia ser bem mais simples
Code Snippetupdate
testeset
media_direita = (num_inic + num_fim) / 2.0Esse código funcionará se objectid for um campo exclusivo, ou seja, sem repetições, se ele tiver repetições, então nenhuma das consultas funcionará. Outros detalhes terão que ser melhor explanados.
[ ]s,
Gustavo
Todas as Respostas
-
Olá Mauriboy,
vc está usando um "=" ao invés de "in" ou "exists", na hora de comparar registros do update com o select?
Acho que vc deve usar algo como o "in", pois ele compara a existencia de valores retornado pelo seu select, muito provavelmente o teu select retorna mais de um valor e como a condição tem que ser "=" ele dá erro, pois o SQL não vai com parar o um valor do código do update uasndo "=" com a saída do select que são várias possibilidades. Mas se vc usar um "in" ou "exists" isso é possível.
Qualquer coisa posta o código, fica melhor pra entender.
-
Boa Tarde,
Esse tipo de requisição pode acontecer quando se usa o UPDATE para atualizar campos de uma tabela baseando-se em outra tabela. Se essa é a necessidade, o código abaixo pode ser bem útil.
Code SnippetUPDATE
T1 SET CampoT1 = T2.CampoT2FROM
T1INNER
JOIN T2 ON T1.Chave = T2.ChaveSe essa não for a necessidade, você poderia postar o código e descrevê-la ?
[ ]s,
Gustavo
-
-
-
Boa Tarde!!!
Demorei um pouco, mas o código ta aqui.
update
testeset
media_direita = (select (num_inic + num_fim)/2 from teste)where
objectid=objectido erro é o seguinte:
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
Com in
update teste
set
media_direita in (select (num_inic + num_fim)/2 from teste)where
objectid=objectiderro:
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'in'.
Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'where'.
Se alguem puder me explicar isso ficarei muito grato.
O objetivo da query é retornar a média de dois campos numéricos populando um campo novo chamado média, tudo isso atrravés de um update, ao invés de criar uma tabela temporária com o objectid, achei melhor fazer um update com select, pois a tabela tem muitas linhas.
Maurício
-
-
-
-
Boa Tarde,
Se é a mesma tabela, acho que o código poderia ser bem mais simples
Code Snippetupdate
testeset
media_direita = (num_inic + num_fim) / 2.0Esse código funcionará se objectid for um campo exclusivo, ou seja, sem repetições, se ele tiver repetições, então nenhuma das consultas funcionará. Outros detalhes terão que ser melhor explanados.
[ ]s,
Gustavo
-
Sensacional!!!, A resposta sua e a do Gustavo sanaram minha dúvida, de fato o select é na mesma tabela, mas se eu quiser de outra tabela, tenho ai a resposta do Emanuel, agora tenho Scripts para as duas situações!!!
Muito Obrigado
Maurício
-
Oi Mauriboy, fico feliz por ter ajudado, a observação do Gustavo é básica, muito bem observado. Eu nem tinha observado essa questão por focar no teu script, ou seja, fiz só o ajuste seguindo a sua linha de raciocínio que era pra vc tentar entender o script que vc estava fazendo.
Mauriboy, se possível classifique as respostas.
Precisando estamos aqui.
Valeu!
-
-