一尘不染

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

sql

我需要为MS Access 2000编写一个SQL查询,以便更新一行(如果存在),但将其插入(如果不存在)。

IE

如果行存在…

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

如果不存在…

INSERT INTO Table1 VALUES (...)

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

(在MySQL中起作用的ON DUPLICATE KEY
UPDATE方法
在这里似乎不起作用。)


阅读 155

收藏
2021-03-17

共1个答案

一尘不染

不在一个查询中,但是您可以对多个行执行两个查询。

在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形式。

2021-03-17