sql >> Base de Datos >  >> RDS >> Mysql

Tabla especificada dos veces en Procedimiento, ¿cómo solucionarlo?

Creo que quieres una 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 
             );

Cambié/arreglé un montón de otras cosas:

  • Los alias de tabla hacen que la consulta sea más fácil de escribir y leer.
  • Los acentos graves hacen que la consulta sea más difícil de escribir y leer.
  • Las condiciones solo en la tabla que se está actualizando deben estar en el exterior WHERE , no el WHERE interno .
  • Establecer variables en un EXISTS subconsulta simplemente no tiene sentido. EXISTS comprueba si filas existir. Lógicamente, podría ejecutarse sin siquiera evaluar el SELECT .