选择具有WITH子句的子查询

时间:2016-06-23 06:53:17

标签: db2 subquery db2-luw

我不熟悉DB2和Oracle,我们可以执行以下操作

select * from 
(WITH A AS (SELECT 'test' FROM DUAL)
 SELECT *
  FROM A )

我要求在DB2中与此类似,但它不允许我。我的要求与上述不完全相同,但我简化了。

还有另外一个问题,我尝试使用以下查询对结果进行XML输出。但问题是当我调用XMLFOREST函数时,它限制我只有一列作为输入(在下面的例子中,A*B它不允许)。

SELECT XMLELEMENT (
      NAME "DATA",
      XMLAGG (XMLELEMENT (NAME "DJ_STOCK", (XMLFOREST (A, B, A * B)))))
FROM (SELECT *
      FROM (SELECT RTRIM (RTRIM (6.0000), '.') A,
                   RTRIM (RTRIM (6.0000), '.') B
              FROM SYSIBM.SYSDUMMY1))

我可以在内部查询中执行A*B并将其称为C,然后从xmlforest函数调用,但由于性能原因,我的实际情况不允许我这样做。任何解决方法?

我使用的是DB2 9.5版本

2 个答案:

答案 0 :(得分:0)

我无法帮助您使用XMLFOREST查询,除非连接数据是一个选项,尽管您可以检查IBM页面。IBM XMLFOREST

您要尝试的第一个查询可能是这样的:

SELECT test
FROM ( SELECT 'test' AS test
       FROM DUAL) A

虽然,我不明白你为什么要这样做而不是只是调用表格,因为你没有对数据做任何事情。

希望它有所帮助。

答案 1 :(得分:0)

公用表表达式(你称之为WITH子句)的全部目的是避免子查询,主要是为了便于阅读。随后,CTE用于最外面的SELECT

WITH A (B) AS (SELECT 'test' FROM DUAL)
select * from 
(SELECT *
  FROM A )

请注意,您必须为上面示例中的文字值B提供计算列('test')的名称。