我是写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