SQLite:更新另一个表中的多个列

时间:2012-08-20 14:27:42

标签: database sqlite

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

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

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

我在使用和不使用ignore语句的情况下尝试过它。

非常感谢任何帮助或建议。在此先感谢!!

2 个答案:

答案 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 duplicateupdate on duplicate key声明。这是手册:http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html