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
RECURSIVEditentukan, itu mengizinkan sebuahSELECTsubquery untuk mereferensikan dirinya sendiri dengan nama.
Penekanan saya yang berani. Dan, bahkan lebih berwawasan:
Efek lain dari
RECURSIVEapakah ituWITHpertanyaan tidak perlu dipesan :kueri dapat mereferensikan kueri lain yang nanti ada dalam daftar. (Namun, referensi melingkar, atau rekursi bersama, tidak diterapkan.)TanpaRECURSIVE,WITHkueri hanya dapat mereferensikan saudaraWITHkueri yang sebelumnya ada diWITHdaftar.
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 ).