On 14 Dec 2012 14:52, Gary Thompson wrote:
I am curious to know how this [an NTE "Nested Table Expression"]
may compare/contrast with CTE "Common Table Expression"

They are similar, but the biggest differences AFaIK are that only the CTE can be used for recursion, and the NTE both appears in the FROM clause [which might be preferred or considered cluttered] and can be used directly for correlated references including LATERAL. An NTE can have non-unique column names which avoids naming the columns when they are unreferenced outside, but [I believe] a CTE must have a column list or have otherwise uniquely named the columns "AS". The CTE can be defined once yet used multiple times in the table-references of the later CTEs and the final SELECT, whereas the same temporary intermediate result set written as NTEs must be defined multiply.

Both are scoped only for use within the statement, and the files into which the temporary data is stored, are true temporary objects; i.e. no ownership\authority costs [overhead] as with permanent objects. Noting: Despite the possible implication [or false inference] per the naming "QTEMP", the external object types in QTEMP are "permanent objects" with all ownership and authority assigned; foremost, because they can be /moved/ into a permanent library. A reference to a VIEW may be able to be used in a query, instead of either a CTE or NTE; the table expressions may be necessary or simply deemed better than having to create, maintain, and possibly drop a VIEW. A correlation-name is required for a NTE, but a CTE /name/ can be the correlation-name just as either a VIEW or TABLE name as table-reference can be used.

After having written all that... from the documentation, see the "can be used":

IBM i 7.1 Information Center -> Database -> Reference -> SQL reference -> Queries -> select-statement
http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/db2/rbafzcomtexp.htm
_i common-table-expression i_
"A common-table-expression permits defining a result table with a table-identifier that can be specified as a table name in any FROM clause of the fullselect that follows. Multiple common table expressions can be specified following the single WITH keyword. Each common table expression specified can also be referenced by name in the FROM clause of subsequent common table expressions.
...
A common-table-expression can be used:

* In place of a view to avoid creating the view (when general use of the view is not required and positioned UPDATE or DELETE is not used)
* To enable grouping by a column that is derived from a scalar-fullselect or function that is not deterministic
* When the required result table is based on variables
* When the same result table needs to be shared in a fullselect
* When the result needs to be derived using recursion
..."

IBM i 7.1 Information Center -> Database -> Reference -> SQL reference -> Queries -> subselect -> from-clause
http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/db2/rbafztabref.htm
_i table-reference i_
"A table-reference specifies an intermediate result table.
...
A nested table expression can be used:

* in place of a view to avoid creating the view (when general use of the view is not required)
* when the wanted result table is based on variables.
..."


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.