Select 在具有 WITH 子句的子查询上

Select over a subquery having WITH clause

我对 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 版本

我无法帮助您进行 XMLFOREST 查询,除非可以选择连接数据,尽管您可以查看 IBM 页面。IBM XMLFOREST

您尝试进行的第一个查询可以是这样的:

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

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

希望对您有所帮助。

通用 table 表达式(您称之为 WITH 子句)的全部目的是避免子查询,主要是为了提高可读性。随后,CTE被用在最外层SELECT:

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

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