इसे सामान्य तालिका व्यंजक कहा जाता है और यह SQL में पुनरावर्ती क्वेरी को व्यक्त करने का एक तरीका है:
t(n)
सीटीई के नाम को t
. के रूप में परिभाषित करता है , n
. नामक एक कॉलम के साथ . यह एक व्युत्पन्न तालिका के लिए एक उपनाम के समान है:
select ...
from (
...
) as t(n);
रिकर्सन मान 1 से शुरू होता है (यह values (1)
. है भाग) और फिर 99 तक पहुंचने तक इसमें एक को पुनरावर्ती रूप से जोड़ता है। तो यह 1 से 99 तक की संख्याएँ उत्पन्न करता है। फिर अंतिम क्वेरी फिर उन सभी संख्याओं का योग करती है।
n
एक कॉलम नाम है, नहीं एक "चर" और "असाइनमेंट" उसी तरह से होता है जैसे कोई डेटा पुनर्प्राप्ति।
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;
यदि आप रिकर्सन को "अनरोल" करते हैं (जो वास्तव में एक पुनरावृत्ति है) तो आप कुछ इस तरह से समाप्त हो जाएंगे:
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)
मैनुअल में अधिक विवरण:
https://www .postgresql.org/docs/current/static/queries-with.html