sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLは、再帰クエリで可能なすべての組み合わせ(順列)を検索します

    再帰クエリでは、反復で使用される検索テーブル内の用語が削除され、残りのレコードでクエリが繰り返されます。あなたの場合、それは、最初の配列要素( "A")を処理するとすぐに、配列要素のそれ以上の順列に使用できなくなることを意味します。これらの「使用済み」要素を元に戻すには、再帰クエリで配列要素のテーブルと相互結合してから、現在の順列ですでに使用されている配列要素を除外する必要があります(position(t.i in cte.combo) = 0 )および反復を停止する条件(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. SQLServerでTOP句を使用するときに最後の場所に結びつく結果を含める方法

    2. 例を使用してOracleでハッシュ結合

    3. SELECT*FROMリンクされたMySQLサーバー

    4. アプリケーションによって発生したすべての「エラーメッセージ」を追跡、識別、および報告するための効果的な方法は何ですか?