sql >> Database teknologi >  >> RDS >> PostgreSQL

CTE-sletning er ikke begået, før følgende udsagn er fuldført

Dette forventes og dokumenteres.

Citat fra manualen

Du kan bruge kædede CTE'er til at slette virksomheden:

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) 

Det er vigtigt at udelukke den netop slettede medarbejder fra not exists underforespørgsel, da det altid vil være synligt i den anden delete-sætning, og derfor vil not exists aldrig være sandt. Så underforespørgslen tjekker i det væsentlige, om der er en anden medarbejder end den slettede, der er tilknyttet samme virksomhed.

Online eksempel:https://rextester.com/IVZ78695



  1. MySQL Sorter efter et nummer, Tomme strenge (eller 0'er) Sidst

  2. WIDE tabeller mysql

  3. Dato casting i oracle

  4. Mysql High UPDATE SELECT forårsager forsinkelse