Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Tabela especificada duas vezes em Procedimento, como corrigir?


Eu acho que você quer uma subconsulta correlacionada:
UPDATE ordersperformers op
    SET op.Status = 1    
WHERE op.Status = 0 AND
      op.Orders_Id = @v_order_id AND
      op.Users_Id = @v_user_id AND
      EXISTS (SELECT  1
              FROM orders o
              WHERE o.id = op.Orders_Id AND
                    NOW() <= DATE_SUB(o.DeliveryDate, INTERVAL 2 HOUR) AND
                    o.Status = 0 
             );

Eu mudei/consertei um monte de outras coisas:
  • Os aliases de tabela facilitam a escrita e a leitura da consulta.
  • Os acentos graves tornam a consulta mais difícil de escrever e ler.
  • As condições apenas na tabela que está sendo atualizada devem estar na parte externa WHERE , não o WHERE interno .
  • Definindo variáveis ​​em um EXISTS subconsulta simplesmente não faz sentido. EXISTS testa se linhas existir. Logicamente, ele poderia ser executado sem nunca avaliar o SELECT .