sql >> Databáze >  >> RDS >> PostgreSQL

Výmaz CTE není potvrzen, dokud nebudou dokončeny následující příkazy

To se očekává a zdokumentuje.

Citát z příručky

můžete použijte zřetězené CTE k odstranění společnosti:

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) 

Je důležité vyloučit právě odstraněného zaměstnance z not exists sub-query, protože bude vždy viditelný ve druhém příkazu delete, a proto nebude existovat nikdy pravdivé. Poddotaz tedy v podstatě zkontroluje, zda ke stejné společnosti není přiřazen jiný zaměstnanec než ten, který byl odstraněn.

Online příklad:https://rextester.com/IVZ78695



  1. Existuje limit na variabilní velikost PHP?

  2. Jak funguje funkce timezone() v PostgreSQL

  3. Stahování dat do šablony z externí databáze pomocí django

  4. Poddotaz Oracle nevidí proměnnou z vnějšího bloku o 2 úrovně výše