PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Kết hợp PostgreSQL không lặp lại

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
        ;

Kết quả:

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

Thật không may, tôi không thể tìm ra cách để tránh hằng số chuỗi kép. (nhưng toàn bộ mọi thứ có thể được đóng gói thành một hàm) Nếu không có ký tự trùng lặp nào (hoặc bạn muốn loại bỏ chúng), bạn có thể thực hiện chống nối trên str thay vì idx.

CẬP NHẬT (gợi ý từ ypercube) Có vẻ như OP muốn các chuỗi được nối với nhau. Vì vậy, hãy là nó ::

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
        ;

Kết quả:

Kết quả
 results 
---------
 WT
 WF
 W!
 TF
 T!
 F!
(6 rows)

UPDATE2:(đây là điều đệ quy ...)

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
        ;

Kết quả 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào tôi có thể đảm bảo rằng một chế độ xem cụ thể hóa luôn được cập nhật?

  2. PostgreSQL lặp lại các chức năng bên ngoài. Điều đó có thể không?

  3. Biến chứa số hàng bị ảnh hưởng bởi DELETE trước đó? (trong một hàm)

  4. Làm thế nào để có được Thời gian tạo cơ sở dữ liệu trong PostgreSQL 9.0?

  5. Postgres - tổng hợp hai cột thành một mục