我有两个具有相同架构的表。我们将它们命名为 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中该列的第一行。
答案 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 )
;