sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL-kombinationer uden gentagelser

set search_path='tmp';

WITH ztab AS (
SELECT idx as idx
, substring ( 'WTF!' FROM idx FOR 1) as str
FROM generate_series(1, char_length( 'WTF!' )) idx
)
SELECT t1.str, t2.str
FROM ztab t1
JOIN ztab t2 ON t2.idx > t1.idx
        ;
 

Resultat:

str | str -----+----- W | T W | F W | ! T | F T | ! F | ! (6 rows)

Desværre kan jeg ikke finde en måde at undgå dobbeltstrengskonstanten. (men det hele kunne pakkes ind i en funktion) Hvis der ikke er nogen duplikerede tegn (eller du vil undertrykke dem), kan du lave anti-join på str i stedet for idx.

OPDATERING (tip fra ypercube) Det ser ud til, at OP'en ønsker, at strengene skal sammenkædes. Så må det være::

WITH ztab AS (
SELECT idx as idx
, substring ( 'WTF!' FROM idx FOR 1) as str
FROM generate_series(1, char_length( 'WTF!' )) idx
)
SELECT t1.str || t2.str AS results
FROM ztab t1
JOIN ztab t2 ON t2.idx > t1.idx
        ;
 

Resultater:

 results 
---------
 WT
 WF
 W!
 TF
 T!
 F!
(6 rows)
 

OPDATERING 2:(her kommer den rekursive ting...)

WITH RECURSIVE xtab AS (
        WITH no_cte AS (
        SELECT
        1::int AS len
        , idx as idx
        , substring ( 'WTF!' FROM idx FOR 1) as str
        FROM generate_series(1, char_length( 'WTF!' )) idx
        )
        SELECT t0.len as len
                , t0.idx
                , t0.str
        FROM no_cte t0
        UNION SELECT 1+t1.len
                , tc.idx
                , t1.str || tc.str AS str
        FROM xtab t1
        JOIN no_cte tc ON tc.idx > t1.idx
        )
SELECT * FROM xtab
ORDER BY len, str
-- WHERE len=2
        ;
 

Resultater 3:

len | idx | str -----+-----+------ 1 | 4 | ! 1 | 3 | F 1 | 2 | T 1 | 1 | W 2 | 4 | F! 2 | 4 | T! 2 | 3 | TF 2 | 4 | W! 2 | 3 | WF 2 | 2 | WT 3 | 4 | TF! 3 | 4 | WF! 3 | 4 | WT! 3 | 3 | WTF 4 | 4 | WTF! (15 rows)

  1. Hvordan fjerner du dublerede elementer i MySQL med et datasæt på 20 millioner rækker?

  2. SQL Developer 4.1.3 udgivet

  3. Django syd migration - Tilføjelse af FULLTEXT indekser

  4. Sådan får du MySQL-status i en forespørgsel