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

Postgres - Berfungsi untuk mengembalikan persimpangan 2 ARRAY?

Sejak 8.4, ada builtin yang berguna di Postgres yang membuat fungsi dari jawaban pertama lebih mudah dan mungkin lebih cepat (itulah yang EXPLAIN memberitahu saya, bagaimanapun:"(cost=0.00..0.07 rows=1 width=64)" untuk kueri ini vs . "(biaya=0.00..60.02 baris=1 lebar=64)" untuk yang asli).

Kode yang disederhanakan adalah:

SELECT ARRAY
    (
        SELECT UNNEST(a1)
        INTERSECT
        SELECT UNNEST(a2)
    )
FROM  (
        SELECT  array['two', 'four', 'six'] AS a1
              , array['four', 'six', 'eight'] AS a2
      ) q;

dan ya, Anda dapat mengubahnya menjadi fungsi:

CREATE FUNCTION array_intersect(anyarray, anyarray)
  RETURNS anyarray
  language sql
as $FUNCTION$
    SELECT ARRAY(
        SELECT UNNEST($1)
        INTERSECT
        SELECT UNNEST($2)
    );
$FUNCTION$;

yang dapat Anda panggil sebagai

SELECT array_intersect(array['two', 'four', 'six']
                     , array['four', 'six', 'eight']);

Tapi Anda juga bisa menyebutnya sebaris juga:

 SELECT array(select unnest(array['two', 'four', 'six']) intersect
              select unnest(array['four', 'six', 'eight']));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan array menggunakan permata Sekuel di PostgreSQL

  2. LIMIT yang dikelompokkan di PostgreSQL:tampilkan N baris pertama untuk setiap grup?

  3. Apa cara paling elegan untuk menyimpan cap waktu dengan nanosec di postgresql?

  4. Optimasi Kueri di PostgreSQL. JELASKAN Dasar-dasar – Bagian 2

  5. Memanggil prosedur tersimpan dalam prosedur tersimpan