我是寫SQL的新手,似乎無法從我的遞歸語句中獲得正確的輸出。源表是這樣的:DB2中的SQL遞歸連接的問題
SEQUENCE TEXT CATEGORY
1 This is apples
2 a complete apples
3 sentence. apples
我試圖得到的輸出是:
CATEGORY TEXT
apples This is a complete sentence.
但是,我得到的結果是:
CATEGORY TEXT
apples This is a complete
我基本上無法連接兩行以上的行。我認爲這與我在WITH語句的遞歸部分中設置的計數有關。
WITH rquery (category, sequence, sentence)
AS (SELECT base.category, base.sequence, base.text
FROM myTable base
WHERE sequence = 1
Union ALL
SELECT t1.category, t1.sequence, sentence || ' ' || t1.text
FROM rquery t0, myTable t1
WHERE t0.category = t1.category And t0.sequence + 1 = t1.sequence
)
SELECT * FROM rquery WHERE sequence in (SELECT MAX(sequence) FROM rquery);
如果您刪除最後一個WHERE子句,結果表明這是怎麼回事,但我似乎無法找到解決的辦法得到它的權利。這裏有沒有最後的WHERE子句:
CATEGORY SEQUENCE SENTENCE
apples 1 This is
apples 2 This is a complete
apples 3 This is a complete
您正在從2個不同的表中進行選擇:'myTable base'和'hfcom.ordcom t1' - 您確定數據在兩個表中都一致嗎? – mustaccio 2014-12-04 18:29:52
錯過了,我糾正了它,是的,這是同一張桌子。 – hattanthecat 2014-12-04 18:58:39
這裏有幾件事情 - 不要使用隱式連接(以逗號分隔的FROM子句)語法。相反,請始終明確列出您的聯接,並儘可能多地將條件移至相關的「ON」子句。您可能還想嘗試將'rquery'連接到原始表上的聚合子查詢中,因爲優化器可能通過索引實現'MAX'更好的時間。 – 2014-12-05 04:07:04