Clipper On Line • Ver Tópico - Update,.,,Join

Update,.,,Join

Discussão sobre SQL

Moderador: Moderadores

 

Update,.,,Join

Mensagempor JoséQuintas » 16 Ago 2017 18:32

Como ficaria o equivalente disto totalmente em MySql

   Mensagem( "Anulando reajuste" )
   WITH OBJECT cnMySql
      :ExecuteCmd( "DELETE FROM JPPREHIS WHERE PHDATA=" + DateSql( mDataReajuste ) + " AND PHOBS LIKE 'REAJ.%'" )
      :cSql := "SELECT PHID, PHITEM, PHCADAS, PHFORPAG, PHVALOR FROM JPPREHIS" + ;
               " INNER JOIN" + ;
               " ( SELECT MAX( PHID ) AS ULTIMOLANC FROM JPPREHIS GROUP BY PHITEM, PHCADAS, PHFORPAG ) AS ULTIMO" + ;
               " ON JPPREHIS.PHID = ULTIMO.ULTIMOLANC" + ;
               " ORDER BY PHITEM, PHCADAS, PHFORPAG"
      :Execute()
      DO WHILE ! :Eof()
         SELECT jppreco
         SEEK :StringSql( "PHITEM" ) + :StringSql( "PHCADAS" ) + :StringSql( "PHFORPAG" )
         IF ! Eof()
            RecLock()
            REPLACE jppreco->pcValor WITH :NumberSql( "PHVALOR" )
            RecUnlock()
         ENDIF
         :MoveNext()
      ENDDO
      :CloseRecordset()
   END WITH


Não deu pra testar, porque JPPRECO ainda é DBF, mas tudo indica que seria isto:

UPDATE JPPRECO 
JOIN
  ( SELECT PHID, PHITEM, PHCADAS, PHFORPAG, PHVALOR FROM JPPREHIS
  INNER JOIN
      ( SELECT MAX( PHID ) AS ULTIMOLANC FROM JPPREHIS GROUP BY PHITEM, PHCADAS, PHFORPAG ) AS ULTIMO
  ON JPPREHIS.PHID = ULTIMO.ULTIMOLANC
  ) AS NOVOPRECO
ON JPPRECO.PCITEM=NOVOPRECO.PHVALOR AND JPPRECO.PHCADAS = NOVOPRECO.PHCADAS AND JPPRECO.PCFORPAG=NOVOPRECO.PHFORPAG
SET JPPRECO.PCVALOR = NOVOPRECO.PHVALOR


Está correto?

JPPREHIS tem o histórico de preços, onde o cadastro é sempre sequencial.
A intenção é salvar o último lançamento de cada conjunto como preço atual em JPPRECO
Existe um preço diferente pra cada conjunto de cliente, produto e forma de pagamento

ULTIMO seria a seleção dos IDs de maior número sequencial
NOVOPRECO seria a seleção de preço desses IDs
e finalmente a atualização relacionando o atual com o NOVOPRECO.

Nota:
Só me preparando pra passar os preços também pra MySql, por enquanto só o histórico está em MySql.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Update,.,,Join

Mensagempor alxsts » 17 Ago 2017 16:32

[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Update,.,,Join

Mensagempor JoséQuintas » 17 Ago 2017 19:38

Me chamaram a atenção estes:

Trocar pelo valor default
UPDATE employee SET salary=DEFAULT;


Trocar conforme expressão
employee SET salary =
CASE dept
WHEN 'Sales' THEN salary+1000
WHEN 'Technology' THEN salary+500
WHEN 'Marketing' THEN salary+500
ELSE salary
END;


Renumerar, usando ordem de trás pra frente.
UPDATE employee SET id=id+100 order by id desc;


Outros eu até já havia usado, por exemplo o UPDATE com limite, usei no servidor de e-mails pra liberar uma qtde de e-mails por vez.

Na pesquisa para o comando que postei aqui, cheguei a encontrar pergunta num fórum para essa segunda questão mas sem resposta, só indicaram pra fazer um comando por vez. Acabei ficando curioso em saber como poderia ser, e o texto do link acabou mostrando esse CASE.

Isso mostra o quanto se perde usando DBF: muito fonte pra pouca coisa... rs
E ainda não dá pra considerar isso como uso avançado, tem muito mais recurso pela frente.

Gostei mesmo, valeu.

Mais um como retribuição... rs
Atualizando estoque sem precisar do aplicativo fazer isso.

http://www.devmedia.com.br/implementando-controle-de-estoque-no-mysql-com-triggers-e-procedures/26352
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro