PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL znajduje wszystkie możliwe kombinacje (permutacje) w zapytaniu rekurencyjnym

W zapytaniu rekurencyjnym terminy w tabeli wyszukiwania, które są używane w iteracji, są usuwane, a następnie zapytanie powtarza się z pozostałymi rekordami. W twoim przypadku oznacza to, że po przetworzeniu pierwszego elementu tablicy („A”) nie jest on już dostępny dla dalszych permutacji elementów tablicy. Aby odzyskać te "używane" elementy, musisz połączyć się krzyżowo z tabelą elementów tablicy w zapytaniu rekurencyjnym, a następnie odfiltrować elementy tablicy już używane w bieżącej permutacji (position(t.i in cte.combo) = 0 ) i warunek zatrzymania iteracji (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. Postgresql - tworzenie kopii zapasowej bazy danych i przywracanie na innego właściciela?

  2. Jak sprawić, by klucz podstawowy miał X cyfr w PostgreSQL?

  3. Błąd podczas mapowania kolumny PostgreSQL LTREE w trybie hibernacji

  4. F# Połącz SQLProvider z Postgres

  5. Play Framework + Heroku + Postgres nie może się połączyć