作者博客地址更换至CSDN,地址:http://blog.csdn.net/littlebrain4solving
由于业务涉及到复杂的查询,需要多处引用查询过的一个结果集,而在DB2里面不支持使用变量作为中间存储(直接存储这个结果集),这个时候需要使用到DB2特定的一种方式(WITH AS).
(注:存储过程里面不支持这种用法,本人亲测.)
以下是标准的用法形式:
WITH [结果名](字段名...) AS (
[SELECT 字段名 FROM .....]
)SELECT * FROM [结果名]
示例一(单次递归):
WITH T1(NAME,AGE) AS(
--把年龄大于18的人全部取出.
SELECT NAME,AGE FROM PERSON WHERE AGE > 18
SELECT * FROM T1
示例二(多次递归)
WITH T1(NAME,AGE) AS(
--把年龄大于18的人全部取出.
SELECT NAME,AGE FROM PERSON WHERE AGE > 18
),T2(NAME,AGE)AS(
--由于我们知道T1只有2个字段,所以可以直接使用*.
SELECT * FROM T1 WHERE NAME NOT IN (SELECT NAME FROM T1 WHERE NAME = '张三')
SELECT * FROM T2