1

我有一个新数据集,已导入到数据库中的新表中。我需要将旧表中的几个字段复制到新表中。新表中可能有新记录或删除记录,所以我只想在名称匹配时更新。

这是我到目前为止所拥有的。这会运行,但只更新第一条记录:

update or ignore NEWDATA 
set CATEGORY=(select CATEGORY from OLDDATA), 
    KEY=(select KEY from OLDDATA) 
where Material=(select Material from OLDDATA);

我已经尝试过使用和不使用忽略语句。

任何帮助或建议将不胜感激。提前致谢!!

4

2 回答 2

0

您需要的是加入更新语句的能力 - 不幸的是,这在 sqlite 中不可用。 在 SQLite 上连接表时如何进行更新?

起初,我认为您无能为力,但后来我使用了我想出的替换语句,这可能对您有用,具体取决于您的数据库架构:

replace into newdata
(material, category, key, extra_col1, extra_col2)
select o.material, o.category, o.key, n.extra_col1, n.extra_col2
from olddata o
inner join newdata n on o.material = n.material

这种方法有几个问题。虽然内部连接使它只替换现有数据(有点像更新),但替换与更新仍然有点不同。在我的测试表中,我必须在材料列上放置主键或唯一键。此外,如果您使用引用此数据的外键,如果您有级联等,您可能会遇到问题。由于我看不到您的架构,我不确定这些是否会给您带来问题。

希望这可以帮助。

于 2012-08-20T22:45:15.033 回答
-1

您可以使用update On duplicateupdate on duplicate key声明。这是手册:http ://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

于 2012-08-20T17:27:11.480 回答