我需要为MS Access 2000编写一个SQL查询,以便更新一行(如果存在),但将其插入(如果不存在)。
IE
如果行存在…
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 ) ) ;
您也可以颠倒顺序,先插入新行,然后再更新所有行(如果它们更适合您的数据)。
*注意,IN和NOT IN子查询可可能转换为等值JOIN和LEFT JOIN with check for NOT NULL形式。
IN
NOT IN
JOIN
LEFT JOIN with check for NOT NULL