sql >> Database >  >> RDS >> PostgreSQL

CTE-verwijdering niet vastgelegd totdat de volgende instructies zijn voltooid

Dit wordt verwacht en gedocumenteerd.

Citaat uit de handleiding

Je kunt geketende CTE's gebruiken om het bedrijf te verwijderen:

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) 

Het is belangrijk om de zojuist verwijderde medewerker uit te sluiten van de not exists subquery omdat die altijd zichtbaar zal zijn in de tweede delete-instructie en dus het niet bestaat zou nooit waar zijn. De subquery controleert dus in wezen of er een andere werknemer is dan de verwijderde die aan hetzelfde bedrijf is toegewezen.

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



  1. Ik heb meerdere query's, ik wil alle queryresultaten samenvoegen in dezelfde tabel

  2. Waarom wordt de 2e T-SQL-query veel sneller uitgevoerd dan de eerste wanneer deze wordt aangeroepen door Reporting Services 2005 in een web-app

  3. hoe de api_token kolom in token guard te veranderen

  4. Vervolgkeuzelijst invullen vanuit MySQL-kolomgegevens