2014-09-28 50 views
0

這是一個API生成的查詢 - 不知道什麼是錯的。語法錯誤與更新查詢時加入一些表

UPDATE T123 
SET COL1 = 1, VER1 = VER1 + 1 
INNER JOIN 
    SELECT C1 
    FROM (SELECT T.NUM_FLD C1 FROM WAPTDT_123 T) TAB ON C1 = REQUEST_ID 

給我的錯誤

SQL命令無法正常結束

所有列存在於表,我相信事情是錯誤的連接和運行在Oracle此命令。

編輯

一件事是,因爲我從一些API獲取查詢

SELECT C1 
FROM (SELECT T.NUM_FLD C1 FROM WAPTDT_123 T) TAB 

部分是固定的。

回答

2

Oracle不支持joinupdate語法:

UPDATE T123 
    SET COL1 = 1, 
     VER1 = VER1 + 1 
    WHERE EXISTS (SELECT 1 FROM WAPTDT_123 T WHERE T123.REQUEST_ID = T.NUM_FLD); 

這是標準的SQL,應該在任何數據庫。

您的查詢還有其他問題。 。 。子查詢不在括號內,inner join沒有第一個表。

編輯:

您可以用子查詢編寫這個查詢:

UPDATE T123 
    SET COL1 = 1, 
     VER1 = VER1 + 1 
    WHERE T123.REQUEST_ID IN (SELECT C1 FROM (SELECT T.NUM_FLD C1 FROM WAPTDT_123 T) TAB); 

我換這一個IN,只是因爲這是另一種選擇。你仍然可以使用EXISTS

+0

Thanx爲您的答案,但我不能改變這樣的查詢。請參閱上面我的問題的編輯部分。 – 2014-09-28 15:55:41

+0

Exists的例子?哪一個在性能方面更好,因爲這個查詢可能導致毫秒行更新。 – 2014-09-28 16:06:57

+1

@MohdAdnan。 。 。我傾向於傾向於「存在」,但我認爲Oracle在優化兩種查詢方面做得很好。 – 2014-09-28 16:11:19