我需要为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方法似乎不适用于此.)
不在一个查询中,但您可以对多行执行两次查询.
在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)
您也可以撤消订单并首先插入新行,然后更新所有行,以便更好地符合您的数据.
*注意IN和NOT IN子查询可可能转换为等值JOIN和LEFT JOIN with check for NOT NULL形式.