2012-02-07 90 views
0

我有一張表,我想檢查是否存在記錄,如果不插入新行並更新上一行,請保留它。我想知道如果我可以在下面使用合併嗎?與相同的目標和源表合併

CREATE TABLE a 
    (keycol INT PRIMARY KEY, 
    col1 INT NOT NULL, 
    col2 INT NOT NULL, 
    col3 INT NOT NULL); 

INSERT INTO a VALUES (1,0,0,0),(2,0,0,0); 

MERGE INTO a 
USING select 1 from a where col1 = 3 
WHEN NOT MATCHED THEN 
UPDATE SET 
col2 = 2, 
col2 = 2, 
col3 = 2 
where col1 = 3 
WHEN NOT MATCHED THEN 
INSERT (keycol, col1, col2, col3) 
VALUES (4, 0, 0, 0) 

感謝,

+0

應該是第一個條件是'WHEN MATCHED' - 當'NOT MATCHED'你不會有連續更新和需要插入 – JNK 2012-02-07 15:08:35

+0

請仔細閱讀問題,沒事的時候匹配我想插入和更新 – user570715 2012-02-07 15:13:46

+1

我確實讀過它,而您提出的解決方案是無稽之談。當沒有匹配時,你想更新**什麼**?沒有要更新的行。你想更新表中的每一行? – JNK 2012-02-07 15:14:57

回答

3
MERGE INTO a 
    USING (
      VALUES (3,3,2,2), 
       (4,0,0,0) 
     ) AS source (keycol, col1, col2, col3) 
    ON a.keycol = source.keycol 
     AND a.col1 = source.col1 
WHEN MATCHED THEN 
    UPDATE 
     SET col2 = source.col2, 
      col3 = source.col3 
WHEN NOT MATCHED THEN 
    INSERT (keycol, col1, col2, col3) 
     VALUES (keycol, col1, col2, col3); 
+0

這是恕我直言,正確的答案 - 至少它適用於我這個問題:) – 2014-08-12 20:59:03