PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Usunięcie CTE nie zostało zatwierdzone do czasu zakończenia następujących oświadczeń

Jest to oczekiwane i udokumentowane.

Cytat z instrukcji

możesz użyj połączonych CTE, aby usunąć firmę:

with deleted_emp as (
  delete from employee 
  where id = 1 
  returning company_id, id as employee_id
)
delete from company
where id in (select company_id from deleted_emp) 
  and not exists (select * 
                  from employee e
                     join deleted_emp af 
                       on af.company_id = e.company_id 
                      and e.id <> af.employee_id) 

Ważne jest, aby wykluczyć właśnie usuniętego pracownika z listy not exists podzapytanie, ponieważ będzie ono zawsze widoczne w drugiej instrukcji delete, a zatem nie istnieje nigdy nie będzie prawdziwe. Tak więc podzapytanie zasadniczo sprawdza, czy istnieje pracownik inny niż usunięty, przypisany do tej samej firmy.

Przykład online:https://rextester.com/IVZ78695



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - nieskończona rekurencja wykryta w polityce dla relacji

  2. Zastosowanie szyn dla wielu najemców:jakie są zalety i wady różnych technik?

  3. Indeks nie jest używany, gdy w postgresie jest używane LIMIT

  4. PostgreSQL - jak renderować datę w innej strefie czasowej?

  5. Jak porównać 2 kolejne wartości wierszy w obiekcie wyniku za pomocą Pythona?