将列数据的子集从一个表复制到另一个表

时间:2011-10-21 18:15:51

标签: sqlite

我有两个具有相同架构的表。我们将它们命名为 TestTable TestTableTemp 。我需要将两列从TestTableTemp复制到TestTable而不会中断其他数据。 TestTable中的行是TestTableTemp中的行的子集。假设我需要复制的列名为 Column1 Column2 ,并且列 primaryKey 具有相同的主键引用。


在mysql中我相信这可以这样做或类似的东西:

UPDATE TestTable, TestTableTemp
SET TestTable.Column1 = TestTableTemp.Column1, TestTable.Column2 = TestTableTemp.Column2
WHERE TestTable.primaryKey = TestTableTemp.primaryKey

Sqlite不允许在update语句中定义多个表,如其参考数据中所示:http://www.sqlite.org/lang_update.html

我能想出的最好的是:

UPDATE TestTable SET
Column1 = (select TestTableTemp.Column1 from TestTableTemp, TestTable where TestTable.primaryKey = TestTableTemp.primaryKey),
Column2 = (select TestTableTemp.Column2 from TestTableTemp, TestTable where TestTable.primaryKey = TestTableTemp.primaryKey) 
WHERE EXISTS(select * from TestTableTemp where TestTable.primaryKey = TestTableTemp.primaryKey"

这给我一个“。”附近的语法错误。我猜这是因为我无法在标量表达式中引用TestTable。

有人能指出我正确的方向吗?非常感谢任何帮助。

编辑:

我稍微清理了第二个查询。它似乎只是将Column1和Column2设置为TestTableTemp中该列的第一行。

1 个答案:

答案 0 :(得分:2)

您的原始查询进行比较:

UPDATE TestTable, TestTableTemp
   SET TestTable.Column1 = TestTableTemp.Column1
     , TestTable.Column2 = TestTableTemp.Column2
 WHERE TestTable.primaryKey = TestTableTemp.primaryKey

这是工作查询(我只是略微改变了你的版本):

http://sqlfiddle.com/#!5/f3a19/9

UPDATE TestTable
SET

  Column1 = ( SELECT TestTableTemp.Column1
              FROM   TestTableTemp
              WHERE  TestTableTemp.primaryKey = TestTable.primaryKey )

 ,Column2 = ( SELECT TestTableTemp.Column2
              FROM   TestTableTemp
              WHERE  TestTableTemp.primaryKey = TestTable.primaryKey )

WHERE EXISTS( SELECT NULL
              FROM   TestTableTemp
              WHERE  TestTableTemp.primaryKey = TestTable.primaryKey )
;