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

Изтриването на CTE не е ангажирано, докато не бъдат завършени следните оператори

Това е очаквано и документирано.

Цитат от ръководството

Вие можете използвайте верижни CTE, за да изтриете компанията:

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) 

Важно е да изключите току-що изтрития служител от not exists подзаявка, тъй като това винаги ще бъде видимо във второто изявление за изтриване и по този начин не съществува никога няма да е вярно. Така че подзаявката по същество проверява дали има служител, различен от изтрития, назначен към същата компания.

Онлайн пример: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. Групово upsert с SQLAlchemy

  2. Групиране по месец, върнете 0, ако не е намерен запис

  3. sp_send_dbmail алтернатива в postgres? Лесен начин за изпращане на отчети по имейл на Postgre?

  4. Хибернацията не записва обект в базата данни?

  5. Postgresql:премахване на интервали между определен тип цифри