PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Hapus CTE tidak dilakukan sampai pernyataan berikut selesai

Ini diharapkan dan didokumentasikan.

Kutipan dari manual

Anda bisa gunakan CTE berantai untuk menghapus perusahaan:

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) 

Penting untuk mengecualikan karyawan yang baru saja dihapus dari not exists sub-query seperti itu akan selalu terlihat dalam pernyataan hapus kedua dan dengan demikian tidak ada tidak akan pernah benar. Jadi sub-kueri pada dasarnya memeriksa apakah ada karyawan selain yang dihapus yang ditugaskan ke perusahaan yang sama.

Contoh online:https://rextester.com/IVZ78695



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menghubungkan postgresql di hibernate.cfg.xml

  2. Batas waktu python psycopg2

  3. Menambahkan (mendorong) dan menghapus dari array JSON di PostgreSQL 9.5+

  4. Apakah lebih baik membuat indeks sebelum mengisi tabel dengan data, atau setelah data ada?

  5. SQL:Cara menggabungkan duplikat case-insensitive