2016-09-17 49 views
0
UPDATE table1 t SET t.columnA = 
(SELECT MIN(columnB) FROM 
    (SELECT columnB FROM table2 
    WHERE table2.fk = t.pk 
    UNION ALL 
    SELECT columnB FROM table3 
    WHERE table3.fk = t.pk)) 

給我ORA-00904: "T"."PK": invalid identifier。任何想法如何實現這一目標?使用Oracle中的聯合更新最小值

回答

1

這是一個範圍界定問題。 Oracle無法識別外層查詢別名超過一層嵌套深度。

如果我們假設值是兩個表中,那麼你可以使用LEAST()與子查詢:

UPDATE table1 t 
    SET t.columnA = LEAST((SELECT MIN(columnB) 
          FROM table2 
          WHERE table2.fk = t.pk 
          ), 
          (SELECT MIN(columnB) 
          FROM table3 
          WHERE table2.fk = t.pk 
          ) 
         ); 

如果沒有,你可以出移動的相關條款一級修改查詢:

UPDATE table1 t 
    SET t.columnA = (SELECT MIN(columnB) 
        FROM ((SELECT table2.fk, columnB FROM table2 
          ) UNION ALL 
          (SELECT table3.fk, columnB FROM table3 
          ) 
         ) tt 
        WHERE tt.fk = t.pk 
        ); 
+0

第二個是我需要的。爲什麼我沒有想到這一點? :) 非常感謝。 – Cantillon