2011-10-21 59 views
3

我有两个具有相同模式的表。让我们将它们命名为TestTableTestTableTemp。我需要从TestTableTemp复制两列到TestTable,而不会中断其他数据。 TestTable中的行是TestTableTemp中的行的子集。假设我需要复制的列被命名为列1列2并且它们具有相同的主键参考列primaryKey将列数据的子集从一个表复制到另一个表


在MySQL中,我相信这会是这样的或类似的东西来完成:

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

sqlite的不允许多个表上的更新语句可以定义人们看到他们的参考数据在这里: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

你有没有找到一个答案题? – DoctorG

回答

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) 
; 
相关问题