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

Cập nhật hàng loạt trong postgreSQL bằng cách sử dụng unnest

Bạn đang gọi unnest 3 lần vào FROM , điều đó có nghĩa là bạn đang thực hiện CROSS JOIN (sản phẩm của cartesian) của 3.

Nếu bạn đang sử dụng PostgreSQL 9.4 trở lên, bạn có thể đơn giản thực hiện một lệnh gọi unnest đưa từng mảng làm đầu vào:

select * from 
         unnest(
            array['2001622', '2001624', '2007903'],
             array[15,14,8],
             array['type1', 'type1', 'type1'],
             array[false, true, true]
        ) as u(id, ver, type, enabled)

Một tùy chọn khác, đối với bất kỳ phiên bản nào, là thêm lệnh gọi vào unnest trong SELECT thay vì FROM :

select
   unnest(array['2001622', '2001624', '2007903']) as id,
   unnest(array[15,14,8]) as ver,
   unnest(array['type1', 'type1', 'type1']) as type,
   unnest(array[false, true, true]) as enabled

Trong cả hai trường hợp, nhưng đặc biệt ở trường hợp cuối cùng, bạn phải đảm bảo mỗi mảng có cùng một số phần tử chính xác. Nếu nó không nằm trên phương thức đầu tiên, mỗi hàng bị thiếu sẽ được điền là NULL, nhưng ở phương thức thứ hai, nó sẽ trả về nhiều hàng bằng LCM số lượng hàng được trả về bởi mỗi hàng, điều mà bạn có thể không muốn. Ví dụ:

SELECT * FROM unnest(array[1,2,3,4], array['a','b','c','d','e','f']);
 unnest | unnest 
--------+--------
      1 | a
      2 | b
      3 | c
      4 | d
 [null] | e
 [null] | f
(6 rows)

SELECT unnest(array[1,2,3,4]), unnest(array['a','b','c','d','e','f']);
 unnest | unnest 
--------+--------
      1 | a
      2 | b
      3 | c
      4 | d
      1 | e
      2 | f
      3 | a
      4 | b
      1 | c
      2 | d
      3 | e
      4 | f
(12 rows)

Kiểm tra tài liệu về lệnh gọi hàm bảng để biết thêm thông tin.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thay đổi cổng pgsql

  2. Lặp lại các bản ghi PostgreSQL. Làm thế nào để tham chiếu dữ liệu từ hàng tiếp theo?

  3. Hành vi kỳ lạ trong Postgresql

  4. Nguyên nhân của PGError:FATAL:chấm dứt kết nối do lệnh của quản trị viên trên heroku là gì?

  5. Làm thế nào để nâng cấp PostgreSQL từ phiên bản 9.6 lên phiên bản 10.1 mà không làm mất dữ liệu?