2017-11-18 71 views
0

我是Oracle的新手。我正嘗試使用MERGE INTO方法更新SELECT DISTINCT語句中值的表值。我想根據USING表中的內容有條件地更新表的值。 的什麼,我基本上要一個快速的圖是Oracle合併到(多個連接表)更新集(多個Where語句)返回無效的列規範

MERGE 
INTO update_table ut 
USING 
(SELECT DISTINCT 
t1.column_1 
,t2.column_2 
FROM table_1 t1 
INNER JOIN table_2 t2 
ON t1.foreign_key = t2.primary_key) st 
ON (ut.pk = st.column_1) 
WHEN MATCH UPATE 
SET(ut.update_column = st.column_2 
    WHERE st.column_1 = 1 
    AND st.column_2 = 1 
    ,ut.update_column = st.column_2 
    WHERE st.column_1 = 2 
    AND st.column_2 = 2); 

然而,當我這樣做,我得到的,我用SET行了無效的列規格錯誤。我怎樣才能解決這個問題,以成功更新表格,最好是ANSI標準?

回答

0

您可以在using子句本身的選定列表中添加where子句中添加的條件。喜歡這個。 (未經測試。你在where子句條件是不恰當的)

MERGE 
INTO update_table ut 
USING (SELECT DISTINCT 
       t1.column_1 , 
       CASE 
         WHEN t1.column_1 = 1 
           AND t2.column_2 = 1 
         THEN t2.column_1 
         WHEN t1.column_1 = 2 
           AND t2.column_2 = 2 
         THEN t2.column_2 
       END column_2 
     FROM 
       table_1 t1 
     INNER JOIN table_2 t2 ON t1.foreign_key = t2.primary_key 
     ) st 
ON (ut.pk = st.column_1) 
WHEN MATCHED THEN 
UPDATE SET ut.update_column = st.column_2 ; 
+0

好了,所以如果我的理解是正確的,這意味着我不能使用其中在這種情況下,語句。我需要擁有正確的數據集,而不是依賴update語句中的where子句。 – Jizzle21013

+0

@ Jizzle21013:如果你願意,你可以包含'ut.column_name = value'的where子句以及更新。但對於源表,最好將它限制在using子句本身中。 –