Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tabela określona dwukrotnie w procedurze, jak naprawić?

Myślę, że potrzebujesz skorelowanego podzapytania:

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

Zmieniłem/naprawiłem kilka innych rzeczy:

  • Aliasy tabel ułatwiają pisanie i czytanie zapytań.
  • Wsteczne znaki utrudniają pisanie i odczytywanie zapytania.
  • Warunki tylko dla aktualizowanej tabeli powinny znajdować się w zewnętrznym WHERE , a nie wewnętrzne WHERE .
  • Ustawianie zmiennych w EXISTS podzapytanie po prostu nie ma sensu. EXISTS sprawdza, czy wiersze istnieć. Logicznie, może działać bez oceny 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. Wstaw do bazy danych (mysql) za pomocą Ajax i PHP

  2. Laravel + Włóczęga =Odmowa dostępu dla użytkownika 'root'@'localhost'

  3. Kursor MySql - Tworzenie procedury

  4. Zapytanie parametryczne MySQL w Pythonie powoduje konflikt z symbolem wieloznacznym % w instrukcji LIKE

  5. Obciąć wszystkie tabele w bazie danych MySQL w jednym poleceniu?