sql >> Databasteknik >  >> RDS >> PostgreSQL

CTE-borttagning inte begått förrän följande uttalanden är klara

Detta förväntas och dokumenteras.

Citat från manualen

Du kan använd kedjade CTE:er för att ta bort företaget:

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 är viktigt att utesluta den nyss raderade medarbetaren från not exists underfrågan eftersom den alltid kommer att vara synlig i den andra delete-satsen och därför skulle not exists aldrig vara sant. Så underfrågan kontrollerar i huvudsak om det finns en annan anställd än den borttagna som är tilldelad samma företag.

Onlineexempel:https://rextester.com/IVZ78695



  1. MySQL-fråga för att hitta det bästa boendet till bästa priser

  2. Kan jag använda MySQL LOAD XML LOCAL INFILE om mina rader inte har ett "namn"?

  3. Hur man tar bort en datafil från en SQL Server-databas (T-SQL)

  4. Funderar på att extrahera data mellan parenteser i en sträng via MYSQL