【问题标题】:SQLite: Update multiple columns from another table [duplicate]SQLite:从另一个表更新多个列[重复]
【发布时间】:2012-08-20 14:27:42
【问题描述】:

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

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

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

我在有无忽略语句的情况下都试过了。

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

【问题讨论】:

    标签: database sqlite


    【解决方案1】:

    您需要的是加入更新语句的能力 - 不幸的是,这在 sqlite 中不可用。 How do I make an UPDATE while joining tables on 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
    

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

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复!我收到以下错误:表 NEWDATA 有 9 列,但提供了 3 个值。我只想替换类别和关键列。我最终可能会编写一个例程来循环遍历新数据并更新记录。
    • 只需添加您要保留的其他列:选择 o.material, o.category, o.key, n.column1, n.column2, ...
    • 这对我不起作用,只是将连接数据附加到表的底部...:/
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 1970-01-01
      • 2014-03-13
      • 2017-06-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多