我有一个新数据集已导入我数据库中的新表。我需要将旧表中的几个字段复制到新表中。新表中可能有新记录或已删除的记录,因此我只想更新名称是否匹配。
这是我到目前为止所拥有的。这会运行,但只更新第一条记录:
update or ignore NEWDATA
set CATEGORY=(select CATEGORY from OLDDATA),
KEY=(select KEY from OLDDATA)
where Material=(select Material from OLDDATA);
我在使用和不使用ignore语句的情况下尝试过它。
非常感谢任何帮助或建议。在此先感谢!!
答案 0 :(得分:0)
您需要的是能够加入更新语句 - 不幸的是,这在sqlite中不可用。 How do I make an UPDATE while joining tables on SQLite?
起初,我认为你没有什么可以做的,但后来我玩了一下我提出的替换语句,可能为你工作,具体取决于你的数据库模式: / p>
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
这种方法有几个问题。虽然内连接使得它只替换现有数据(有点像更新),但替换仍然与更新有点不同。在我的测试表中,我必须在材料列上放置主键或唯一键。此外,如果您使用引用此数据的外键,如果您有级联等,则可能会遇到问题。由于我看不到您的架构,我不确定这些是否会成为您的问题。
希望这有帮助。
答案 1 :(得分:-1)
您可以使用update On duplicate
或update on duplicate key
声明。这是手册:http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html