2016-06-23 25 views
0

子查詢我不熟悉到DB2和Oracle中,我們可以做以下選擇在具有WITH子句

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

+0

使用'XMLCONCAT'組裝多個XML元素 – Stavr00

回答

0

公用表表達式(您稱爲WITH子句)的全部用途是爲了避免子查詢,主要是爲了便於閱讀。隨後,CTE被用於在最外層SELECT

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

注意,必須計算出的列(用於文字值'test'在上面的例子中B)提供名字。

+0

DB2中沒有DUAL表,相當於SYSIBM.SYSDUMMY1。 –

+0

@HarinathArasu - 如果啓用了Oracle兼容性,那麼對於更熟悉Oracle的人員(比如OP)來說,這是一個明智的做法。此外,沒有什麼可以阻止你自己創建這樣一個表。 – mustaccio

0

我不能幫你與XMLFOREST的查詢,除非串聯的數據是一個選項,altough你或許可以檢查IBM頁面。 IBM XMLFOREST

您要作出的第一個查詢可以是這樣的:

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

雖然,我不明白你爲什麼會想這樣做,而不是僅僅調用表,因爲你沒有做任何事情與數據。

希望它有幫助。