2011-10-21 86 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) 
; 
相關問題