2016-04-04 47 views
0

我運行此查詢DB2:得到一個奇怪的syntantical錯誤在DB2 for SQL查詢

with closure (obj_1, obj_2) as (SELECT distinct t.obj_1, t.obj_2 FROM temp4 t 
UNION ALL SELECT c.obj_1, t.obj_2 FROM closure c, temp4 t WHERE c.obj_2=t.obj_1) 

我不斷收到這個錯誤,我不知道如何解決它,因爲意外的標記是預期令牌?:

SQL0104N An unexpected token ")" was found following "HERE c.obj_2=t.obj_1". 
Expected tokens may include: ")". SQLSTATE=42601 
+0

'SELECT distinct f.obj_1,f.obj_2 FROM temp4 t' - 看起來您在字段列表中使用的是別名'f'而不是't'。我也將在下半部分切換到'INNER JOIN',而不是使用過濾器進行交叉連接。 –

+0

@DStanley好趕上!你是在暗示這個? '閉包(obj_1,obj_2)爲(SELECT t.obj_1,t.obj_2 FROM temp4 t UNION ALL SELECT c.obj_1,t.obj_2 FROM closure c,temp4 t)' – Nataly

+0

沒有保持工會,但改變了下半年'SELECT c.obj_1,t.obj_2 FROM closure c INNER JOIN temp4 t ON c.obj_2 = t.obj_1' –

回答

0

您使用的是公用表表達式(CTE)唯 - 的選擇用於CTE丟失(除了從d士丹利評論

所以檢查出這樣的事:

with closure (obj_1, obj_2) as (
SELECT distinct t.obj_1, t.obj_2 
    FROM temp4 t 
UNION ALL 
SELECT c.obj_1, t.obj_2 
    FROM closure c, temp4 t 
    WHERE c.obj_2=t.obj_1) 
SELECT * FROM closure 
+0

謝謝!這個工程,不能相信我忘了,但由於某種原因,它不是一個無限循環,任何建議如何找出這一個? – Nataly

+0

在UNION之後(在CTE內)在SELECT中添加停止條件。如果在cte中找不到任何兩個查詢都添加計數器並在WHERE條件中使用它來限制循環 – MichaelTiefenbacher

+0

您能否告訴我一個停止解釋或進一步解釋的示例?對不起,我是這個新手。 – Nataly