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) 
    

    削除したばかりの従業員を存在しないから除外することが重要です サブクエリは、2番目のdeleteステートメントで常に表示されるため、存在しないことは決して真ではありません。したがって、サブクエリは基本的に、削除された従業員以外の従業員が同じ会社に割り当てられているかどうかを確認します。

    オンラインの例: https://rextester.com/IVZ78695



    1. JavaでのOracleテーブルの変更の通知

    2. WireGuardを使用したMariaDBレプリケーションのマルチクラウド展開

    3. PHPの単語インデックス、パフォーマンス、および妥当な結果

    4. T-SQLを使用してSQLServerでSQLジョブを構成する