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

PostgreSQL multi INSERT ... RETURNING với nhiều cột

Sử dụng CTE sửa đổi dữ liệu để xâu chuỗi ba CHÈN của bạn. Một cái gì đó như thế này:

WITH ins1 AS (
   INSERT INTO table1 (username, name,  surname)
   VALUES ('johnee','john','smith')
   RETURNING user_id
   )
, ins2 AS (
   INSERT INTO table2 (user_id, password)
   SELECT ins1.user_id, 'secret'
   FROM   ins1                            -- nothing to return here
   )
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM   ins1
RETURNING user_id;
  • Thông thường, tốt nhất là thêm danh sách định nghĩa cột cho INSERT s (trừ trường hợp đặc biệt). Ngoài ra, nếu cấu trúc bảng thay đổi, mã của bạn có thể bị hỏng theo những cách đáng ngạc nhiên.

  • Tôi đã bỏ qua các cột mà bạn chỉ cần nhập DEFAULT . Các giá trị mặc định được chèn tự động. Ngắn hơn, cùng một kết quả.

  • RETURNING cuối cùng, tùy chọn trả về user_id kết quả - rõ ràng là từ một chuỗi hoặc một số mặc định khác. Nó thực sự là user_id từ table3 , nhưng điều đó vẫn tương tự trừ khi bạn có một số kích hoạt hoặc ma thuật khác can thiệp.

Tìm hiểu thêm về CTE sửa đổi dữ liệu (còn gọi là "có thể ghi"):

  • Các truy vấn loại SELECT có phải là loại duy nhất có thể được lồng vào nhau không?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgreSQL - psql \ i:cách thực thi tập lệnh trong một đường dẫn nhất định

  2. Tốt hơn là tạo chỉ mục trước khi điền vào bảng với dữ liệu hay sau khi dữ liệu được đặt đúng vị trí?

  3. pgDash Alternatives - Giám sát cơ sở dữ liệu PostgreSQL với ClusterControl

  4. Lấy tên tháng từ một ngày trong PostgreSQL

  5. Tính số sự kiện đồng thời trong SQL