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

Làm thế nào để loại bỏ các phần tử của mảng trong PostgreSQL?

Sử dụng unnest() với array_agg() , ví dụ:

with cte(array1, array2) as (
    values (array[1,2,3,4], array[1,4])
    )
select array_agg(elem)
from cte, unnest(array1) elem
where elem <> all(array2);

 array_agg 
-----------
 {2,3}
(1 row)

Nếu bạn thường cần chức năng này, hãy xác định chức năng đơn giản:

create or replace function array_diff(array1 anyarray, array2 anyarray)
returns anyarray language sql immutable as $$
    select coalesce(array_agg(elem), '{}')
    from unnest(array1) elem
    where elem <> all(array2)
$$;

Bạn có thể sử dụng hàm cho bất kỳ mảng nào, không chỉ int[] :

select array_diff(array['a','b','c','d'], array['a','d']);

 array_diff 
------------
 {b,c}
(1 row) 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nhập hàng vào Postgresql từ STDIN?

  2. Cách xác định khóa chính được tạo tự động được sử dụng làm khóa ngoại cho một bảng khác

  3. Tối ưu hóa nhiều kết hợp

  4. Làm cách nào để xóa mọi bảng trong một lược đồ cụ thể trong postgres?

  5. Làm cách nào để ghi lại mã cơ sở dữ liệu của bạn để xem sự phụ thuộc giữa các đối tượng cơ sở dữ liệu?