簡體   English   中英

SQL訪問查詢 - 如果存在則更新行,如果不存在則插入

[英]SQL access query- Update row if exists, insert if does not

我需要為MS Access 2000編寫SQL查詢,以便在存在時更新行,但如果不存在則插入。

如果行存在...

UPDATE Table1 SET (...) WHERE Column1='SomeValue' 

如果它不存在......

INSERT INTO Table1 VALUES (...) 

這可以在一個查詢中完成嗎?

(在MySQL中工作的ON DUPLICATE KEY UPDATE方法似乎不適用於此。)

不在一個查詢中,但您可以對多行​​執行兩次查詢。

在MySQL中,相當於(你已經知道:)

INSERT INTO Table1 (...)
    VALUES(...)
ON DUPLICATE KEY 
    UPDATE column=column+1
;

要么

INSERT INTO Table1 (...)
    ( SELECT ...
        FROM ...
    )
ON DUPLICATE KEY 
    UPDATE column=column+1
;

第二種形式可以用兩個查詢編寫:

UPDATE Table1 
    SET (...) 
    WHERE Column1 = 'SomeValue'
;

INSERT INTO Table1 (...)
    ( SELECT ...
        FROM ...
        WHERE 'SomeValue' NOT IN ( SELECT Column1
                                       FROM Table1 )
    )
;

您也可以撤消訂單並首先插入新行,然后更新所有行,以便更好地符合您的數據。

*請注意, INNOT IN子查詢可能會轉換為等效的JOINLEFT JOIN with check for NOT NULL表單。

這不直接適用於Access [編輯:David-W-Fenton斷言這在訪問中是不可能的] ,但為了完整性(如果有人讀這篇文章對Access以外的東西感興趣):

我在Microsoft SQL Server中取得了成功,使用的方法應該更高效,因為它只需要進行一次索引檢查,而不是兩次。 這是我當前項目的一個例子:

UPDATE ActivityRelationships
SET [Count] = ([Count] + 1)
WHERE ActivityBeforeId=@activityBeforeId AND ActivityAfterId=@activityAfterId
IF @@ROWCOUNT=0
    INSERT INTO ActivityRelationships ([ActivityBeforeId], [ActivityAfterId], [Count])
    VALUES (@activityBeforeId, @activityAfterId, 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM