首页 文章

sqlite将数据从一个表复制到另一个表

提问于
浏览
51

SQLITE

我有两个表“Source”和“Destination”具有相同的字段 . ID和COUNTRY虽然它们都有其他不常见的字段 .

我需要将Source.Country值复制到Destination.Country,其中连接是ID

对于我的生活,我不能让Sqlite这样做 .

在SQL Server等中,这是一个非常简单的任务 .

想法?

4 回答

  • 7

    如果您正在复制这样的数据,这可能意味着您的数据模型没有完全正常化,对吧?是否可以制作一个国家/地区列表并更多地加入?

    您也可以使用虚拟表代替JOIN,这样您就不必更改系统中的查询 .

  • 113
    INSERT INTO Destination SELECT * FROM Source;
    

    有关正式定义,请参阅SQL As Understood By SQLite: INSERT .

  • 1

    如果两个表中都已存在数据,并且您希望根据某些条件更新表列值,请使用此值

    UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)
    
  • 1

    我一直在努力解决这个问题,我知道还有其他选择,但我得出结论最安全的模式是:

    create table destination_old as select * from destination;
    
    drop table destination;
    
    create table destination as select
    d.*, s.country
    from destination_old d left join source s
    on d.id=s.id;
    

    它是安全的,因为在你改变它之前你有 destination 的副本 . 我怀疑带有连接的更新语句不是很强大但有点危险 .

    使用上面的模式,您最终得到两个 country 字段 . 您可以通过显式声明要从 destination_old 检索的所有列来避免这种情况,并且如果 source 中的 country 字段为空,则可能使用 coalescedestination_old 检索值 . 例如:

    create table destination as select
    d.field1, d.field2,...,coalesce(s.country,d.country) country
    from destination_old d left join source s
    on d.id=s.id;
    

相关问题