2016-11-22 59 views
1

我已查看this問題,該問題涉及更新一個查詢中的多個記錄。SQL - 使用複合鍵在一個查詢中更新多個記錄

一般的解決方法是

UPDATE table_name 
SET field_to_update = CASE table_key 
        WHEN key_value1 THEN field_value1 
        WHEN key_value2 THEN feild_value2 
        ELSE feild_to_update 
        END 
WHERE table_key IN(key_value1 , key_value2); 

我的問題是,誰可以在此進行調整,以配合組合鍵。說我是否有列

(id_1, id_2, column_to_update) 

其中id_1和id_2形成一個複合主鍵。

我的問題變得更簡單了,其中一個id列對於特定查詢將是常量。

例如,我需要沿着

UPDATE table_name 
SET field_to_update = CASE (key1, key2) 
       WHEN (1,1) THEN field_value1 
       WHEN (2,1) THEN feild_value2 
       ELSE feild_to_update 
       END 
WHERE (key1, key2) IN ((1, 1) , (2, 1)); 

誰能幫助請線條的東西嗎?

+0

情況下覆蓋只允許上操作,如果你在你的情況下,使用一個元組像你有錯誤「操作數應包含1列(S)」,因爲是2個操作數 – scaisEdge

+0

是的,我知道,但我只是想通過我想要做的事情。即使它需要完全不同的語法,我不介意。 –

+0

有'CASE'的替代形式; 'CASE WHEN [condition] THEN [blah] WHEN [condition2] THEN [blah2] .... ELSE .... END'。 – Uueerdo

回答

1

的情況下,使用元組是不允許的情況下,只允許一個操作數,如果你使用一個元組像你的情況,你有 錯誤「操作數應包含1列(S)」,因爲有2個操作數

但是你可以用一些操作如CONCAT(和隱式轉換)

UPDATE table_name 
    SET field_to_update = CASE concat(key1, key2) 
       WHEN concat(1,1) THEN field_value1 
       WHEN concat(2,1) THEN feild_value2 
       ELSE feild_to_update 
       END 
    WHERE concat(key1, key2) IN (concat(1, 1) , concat(2, 1)); 
+0

完美的解決方案。謝謝 –

+0

@ConnorBishop。感謝確保使用正確的操作,以避免誤報(兩個不同的值,連接變得相同) – scaisEdge

+0

@scaisEdge這樣做的好方法通常是在兩個值之間添加一個不太可能的字符串;例如,在數字'CASE CONCAT(key1,'|',key2)的情況下,當'1 | 1'然後...' – Uueerdo

相關問題