PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

CTE xóa không được cam kết cho đến khi các câu lệnh sau hoàn thành

Điều này được mong đợi và ghi lại.

Trích dẫn từ sách hướng dẫn

Bạn có thể sử dụng CTE chuỗi để xóa công ty:

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) 

Điều quan trọng là phải loại trừ nhân viên vừa bị xóa khỏi not exists truy vấn phụ vì điều đó sẽ luôn hiển thị trong câu lệnh xóa thứ hai và do đó, điều không tồn tại sẽ không bao giờ đúng. Vì vậy, về cơ bản, truy vấn phụ sẽ kiểm tra xem có nhân viên nào khác với nhân viên đã bị xóa được chỉ định vào cùng một công ty hay không.

Ví dụ trực tuyến: 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. Psycopg2 Chèn vào bảng với trình giữ chỗ

  2. Nhận dấu thời gian từ các cột ngày và giờ nối

  3. Tham gia bên ngoài bên trái phức tạp trong Oracle, chuyển đổi sang PostgreSQL

  4. Có nhà điều hành postgres CLOSEST không?

  5. Tham gia bốn bảng liên quan đến THAM GIA TRÁI mà không có bản sao