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

Kemungkinan penjelasan tentang WITH RECURSIVE Query Postgres

Ini disebut ekspresi tabel umum dan merupakan cara untuk mengekspresikan kueri rekursif dalam SQL:

t(n) mendefinisikan nama CTE sebagai t , dengan satu kolom bernama n . Ini mirip dengan alias untuk tabel turunan:

select ... 
from (
  ...
) as t(n);

Rekursi dimulai dengan nilai 1 (itulah values (1) bagian) dan kemudian secara rekursif menambahkan satu sampai 99 tercapai. Jadi itu menghasilkan angka dari 1 hingga 99. Kemudian kueri terakhir kemudian menjumlahkan semua angka itu.

n adalah nama kolom, bukan "variabel" dan "penugasan" terjadi dengan cara yang sama seperti pengambilan data apa pun.

WITH RECURSIVE t(n) AS (
    VALUES (1) --<< this is the recursion "root"
  UNION ALL
    SELECT n+1 FROM t WHERE n < 100 --<< this is the "recursive part"
)
SELECT sum(n) FROM t;

Jika Anda "membuka gulungan" rekursi (yang sebenarnya merupakan iterasi) maka Anda akan mendapatkan sesuatu seperti ini:

select x.n + 1
from (
  select x.n + 1
  from (
    select x.n + 1
    from (
      select x.n + 1
      from (
         values (1)
      ) as x(n) 
    ) as x(n)
  ) as x(n)
) as x(n)

Detail lebih lanjut dalam manual:
https://www .postgresql.org/docs/current/static/queries-with.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan setiap baris ke-n dari database menggunakan ActiveRecord di Rails

  2. PostgreSQL ANSI, Python SQL, codec utf-8' tidak dapat mendekode byte 0xa0

  3. kinerja batch jdbc

  4. Tambahkan teks ke data kolom berdasarkan kolom di PostgreSQL

  5. Simpan dan indeks YAML dengan PostgreSQL, dengan Javascript lib atau fungsi yang dapat digunakan kembali?