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

PostgreSQL menemukan semua kemungkinan kombinasi (permutasi) dalam kueri rekursif

Dalam kueri rekursif, istilah dalam tabel pencarian yang digunakan dalam iterasi dihapus, lalu kueri diulang dengan rekaman yang tersisa. Dalam kasus Anda, itu berarti bahwa segera setelah Anda memproses elemen array pertama ("A"), elemen tersebut tidak lagi tersedia untuk permutasi lebih lanjut dari elemen array. Untuk mendapatkan kembali elemen "bekas" itu, Anda perlu bergabung dengan tabel elemen array dalam kueri rekursif dan kemudian memfilter elemen array yang sudah digunakan dalam permutasi saat ini (position(t.i in cte.combo) = 0 ) dan kondisi untuk menghentikan iterasi (ct <= 3 ).

WITH RECURSIVE t(i) AS (
  SELECT * FROM unnest('{A,B,C}'::char[])
), cte AS (
     SELECT i AS combo, i, 1 AS ct 
     FROM t 
   UNION ALL 
     SELECT cte.combo || t.i, t.i, ct + 1 
     FROM cte, t
     WHERE ct <= 3
       AND position(t.i in cte.combo) = 0
) 
SELECT ARRAY(SELECT combo FROM cte ORDER BY ct, combo) AS result;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan perlu menjalankan REINDEX di postgres

  2. cara menggunakan nilai kolom sebagai input untuk operasi spasial

  3. Bagaimana cara mengurangi detik dari postgres datetime

  4. peran fatal psql tidak ada

  5. ALTER query sangat lambat pada tabel kecil di PostgreSQL