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

Beberapa CTE dalam satu permintaan

Gunakan kata kunci WITH sekali di atas. Jika ada Common Table Expressions (CTE) Anda yang rekursif (rCTE), Anda harus menambahkan kata kunci RECURSIVE di atas sekali juga, meskipun tidak semua CTE bersifat rekursif:

WITH RECURSIVE
  cte1 AS (...)         -- can still be non-recursive
, cte2 AS (SELECT ...
           UNION ALL
           SELECT ...)  -- recursive term
, cte3 AS (...)
SELECT ... FROM cte3 WHERE ...

Panduan:

Jika RECURSIVE ditentukan, itu mengizinkan sebuah SELECT subquery untuk mereferensikan dirinya sendiri dengan nama.

Penekanan saya yang berani. Dan, bahkan lebih berwawasan:

Efek lain dari RECURSIVE apakah itu WITH pertanyaan tidak perlu dipesan :kueri dapat mereferensikan kueri lain yang nanti ada dalam daftar. (Namun, referensi melingkar, atau rekursi bersama, tidak diterapkan.)Tanpa RECURSIVE , WITH kueri hanya dapat mereferensikan saudara WITH kueri yang sebelumnya ada di WITH daftar.

Penekanan berani milikku lagi. Artinya urutan WITH klausa tidak berarti ketika RECURSIVE kata kunci telah digunakan.

BTW, sejak cte1 dan cte2 dalam contoh tidak direferensikan di bagian luar SELECT dan polos SELECT perintah sendiri (tidak ada efek jaminan), mereka tidak pernah dieksekusi (kecuali dirujuk dalam cte3 ).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Langkah demi Langkah postgres_fdw

  2. Cegah pemicu rekursif di PostgreSQL

  3. java.lang.ClassNotFoundException:org.postgresql.Driver, Android

  4. Postgres tidak dapat terhubung ke server

  5. Indeks Sebagian tidak digunakan dalam klausa ON CONFLICT saat melakukan upsert di Postgresql