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 sebuahSELECT
subquery untuk mereferensikan dirinya sendiri dengan nama.
Penekanan saya yang berani. Dan, bahkan lebih berwawasan:
Efek lain dari
RECURSIVE
apakah ituWITH
pertanyaan tidak perlu dipesan :kueri dapat mereferensikan kueri lain yang nanti ada dalam daftar. (Namun, referensi melingkar, atau rekursi bersama, tidak diterapkan.)TanpaRECURSIVE
,WITH
kueri hanya dapat mereferensikan saudaraWITH
kueri yang sebelumnya ada diWITH
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
).