代码之家  ›  专栏  ›  技术社区  ›  Ian Vink

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

  •  57
  • Ian Vink  · 技术社区  · 14 年前

    SQLite

    我有两个表“source”和“destination”具有相同的字段。ID和Country,尽管它们都有其他不同的字段。

    我需要将source.country值复制到destination.country,其中join在id上

    为了我的生命,我不能让sqlite这样做。

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

    思想?

    4 回复  |  直到 5 年前
        1
  •  126
  •   joschi    14 年前
    INSERT INTO Destination SELECT * FROM Source;
    

    SQL As Understood By SQLite: INSERT 对于一个正式的定义。

        2
  •  9
  •   W00di    8 年前

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

    UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)
    
        3
  •  2
  •   Max    7 年前

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

    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 在你改变它之前。我怀疑带有连接的更新语句没有包含在sqlite中,因为它们很强大,但有点危险。

    使用上面的模式,你会得到两个 country 领域。您可以通过显式地声明要从中检索的所有列来避免这种情况。 destination_old 或许使用 coalesce 从中检索值 目的地旧 如果 国家 字段在 source 为空。例如:

    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;
    
        4
  •  1
  •   Niels Bom    14 年前

    如果您像那样复制数据,这可能意味着您的数据模型没有完全规范化,对吗?是否可以列出一个国家列表并加入更多国家?

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