2017-10-17 160 views
0

我很難得到Sqlite中的UPDATE命令,以使用子查詢select語句在另一個表中找到的新值更新所有記錄。它不正確地更新Table1中的每個列,並使用它在列表Table2中找到的第一個值。 當我單獨運行查詢的選擇部分時,它運行良好並返回所有正確的值。它基本上從稱爲調整的查找表中以300000的倍數查找最接近的值。Sqlite更新與選擇子查詢只選擇第一個值

代碼:

Update TEMP1 
    set New_position = 
    (
     select (Temp1.Col1 + Adjustment.Offset) as NewValue 
     from Adjustment, TEMP1 
     where Adjustment.LookupValue = cast(TEMP1.Col1/300000 as Int) * 300000 
    ) 

回答

0

您正在嘗試使用correlated subquery:作爲一個標量子查詢或作爲IN的右手操作數

的SELECT語句,而不是在或EXISTS表達式可能包含對外部查詢中列的引用。這樣的子查詢被稱爲相關子查詢。每次需要結果時,都會重新評估相關子查詢。不相關的子查詢只評估一次,並根據需要重新使用結果。

但是,您的子查詢實際上並不包含對外部查詢中列的引用;內部查詢中的FROM Temp1Temp1表的新實例,而Temp1.Col1指的是該實例。 Temp1.Col1的值來自Temp1中的某個隨機行。

剛落,從該Temp1 FROM子句:

UPDATE Temp1 
SET New_position = (SELECT Temp1.Col1 + Adjustment.Offset 
        FROM Adjustment 
        WHERE LookupValue = CAST(Temp1.Col1/300000 AS INT) * 300000); 
+0

驚人!那樣做了。非常感謝 – DaveP