Mysql
 sql >> база данни >  >> RDS >> Mysql

Таблица, посочена два пъти в процедурата, как да коригирам?

Мисля, че искате корелирана подзаявка:

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 
             );

Промених/поправих куп други неща:

  • Псевдонимите на таблици правят заявката по-лесна за писане и четене.
  • Отметките правят заявката по-трудна за писане и четене.
  • Само условията в таблицата, която се актуализира, трябва да са във външния WHERE , а не вътрешният WHERE .
  • Задаване на променливи в EXISTS подзаявката просто няма смисъл. EXISTS тества дали редове съществуват. Логично може да се изпълни, без изобщо да се оценява SELECT .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Шаблон на хранилище без LINQ или друг ORM?

  2. Производителност на MYSQL IN

  3. свързаността с базата данни се проваля след създаване на jar файл

  4. Как да изградим коментари с нишки с 1 или 2 заявки?

  5. Как да премахна нови знаци от редове от данни в mysql?