SQL访问查询 - 如果存在则更新行,如果不存在则插入

Urb*_*coz 7 sql ms-access

我需要为MS Access 2000编写SQL查询,以便在存在时更新行,但如果不存在则插入.

如果行存在...

UPDATE Table1 SET (...) WHERE Column1='SomeValue' 
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO Table1 VALUES (...) 
Run Code Online (Sandbox Code Playgroud)

这可以在一个查询中完成吗?

(在MySQL中工作的ON DUPLICATE KEY UPDATE方法似乎不适用于此.)

ype*_*eᵀᴹ 8

不在一个查询中,但您可以对多行​​执行两次查询.

在MySQL中,相当于(你已经知道:)

INSERT INTO Table1 (...)
    VALUES(...)
ON DUPLICATE KEY 
    UPDATE column=column+1
;
Run Code Online (Sandbox Code Playgroud)

要么

INSERT INTO Table1 (...)
    ( SELECT ...
        FROM ...
    )
ON DUPLICATE KEY 
    UPDATE column=column+1
;
Run Code Online (Sandbox Code Playgroud)

第二种形式可以用两个查询编写:

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

INSERT INTO Table1 (...)
    ( SELECT ...
        FROM ...
        WHERE 'SomeValue' NOT IN ( SELECT Column1
                                       FROM Table1 )
    )
;
Run Code Online (Sandbox Code Playgroud)

您也可以撤消订单并首先插入新行,然后更新所有行,以便更好地符合您的数据.

*注意INNOT IN子查询可可能转换为等值JOINLEFT JOIN with check for NOT NULL形式.