Update com select

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Update com select

Mensagem por Poka »

Bom dia,

assim, funciona.

Código: Selecionar todos

str:="UPDATE pagard001 p ";
+"SET p.coddesp  = ( SELECT first 1 s.coddesp  FROM pagar_simples001 s  WHERE p.docum||p.codfor = s.docum||s.codfor )";
+",  p.cencusto  = ( SELECT first 1 s.cencusto  FROM pagar_simples001 s  WHERE p.docum||p.codfor = s.docum||s.codfor );"

assim dá erro, s.cencusto não existe, ou é assim mesmo?
não precisaria de dois selects, pois já estou no registro correto com o select.

Código: Selecionar todos

str:="UPDATE pagard001 p ";
+"SET p.coddesp  = ( SELECT first 1 s.coddesp  FROM pagar_simples001 s  WHERE p.docum||p.codfor = s.docum||s.codfor ) ";
+",  p.cencusto  = s.cencusto;"

Poka
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Update com select

Mensagem por Fernando queiroz »

O erro principal aqui é que você está tentando fazer uma atribuição direta de p.cencusto = s.cencusto fora do subquery (subconsulta) que aparece no primeiro SET. Ou seja, o SQL não sabe onde encontrar s.cencusto nesse contexto — pois s está definido dentro do subquery.

Em um UPDATE com subquerys, para que você consiga atualizar mais de uma coluna, normalmente você faz um JOIN em vez de usar subquerys para cada coluna.

tenta assim

Código: Selecionar todos

UPDATE pagard001 p
SET 
  p.coddesp = (SELECT first 1 s.coddesp FROM pagar_simples001 s WHERE s.docum || s.codfor = p.docum || p.codfor),
  p.cencusto = (SELECT first 1 s.cencusto FROM pagar_simples001 s WHERE s.docum || s.codfor = p.docum || p.codfor);
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Update com select

Mensagem por JoséQuintas »

Poka escreveu: assim dá erro, s.cencusto não existe, ou é assim mesmo?
não precisaria de dois selects, pois já estou no registro correto com o select.
Só na sua cabeça.
No comando SQL nem sequer está com a tabela aberta.

É igual mandar seu filho na padaria comprar pão.
E quando ele chegar, falar pra pegar o leite também, alegando que a padaria tá junto com ele.
É isso que tá fazendo no SQL, tá querendo pegar campo do que não está lá.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Update com select

Mensagem por Poka »

Obrigado Quintas.



Poka
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Update com select

Mensagem por Poka »

Obrigado Quintas.



Poka
Responder