2013-02-07 65 views
1
UPDATE 
    tbl1 INNER JOIN tbl2 ON tbl1.id = tbl2.id 
SET tbl2.Field1 = 
    (SELECT TOP 1 tbl3.Field1 FROM tbl3 WHERE tbl3.FromDate<tbl1.StartDate And 
    tbl3.Number=tbl2.Number ORDER BY tbl3.FromDate DESC) 

我嘗試使用上面的SQL上的每一行更新字段1在tbl2的,但我得到的錯誤:嵌套SQL更新不工作

Operation must use an updateable query.

我做了什麼錯?

回答

1

因爲與聯接語法更新數據庫之間變化,我一般用:

UPDATE tbl2 
    SET tbl2.Field1 = . . . 
    from tbl1 
    where tbl1.id = tbl2.id 

(我會放在set語句,但StackOverflow上不會讓我這樣做)

+0

不明白 - 爲字段1的值從何而來TBL3 – ThorOstergaard

+0

如果我更換(select ...)的值與預期的一樣 – ThorOstergaard

0

根據您的上面的描述中,沒有必要通過連接進行更新。如何:

UPDATE tbl2 
SET tbl2.Field1 = 
(SELECT TOP 1 tbl3.Field1 FROM tbl1 JOIN tbl2 AS tbl2_2 ON tbl1.id = tbl2_2.id 
            JOIN tbl3 
WHERE tbl3.FromDate < tbl1.StartDate 
    AND tbl3.Number=tbl2.Number 
ORDER BY tbl3.FromDate DESC) 

如果表很大,我會考慮索引tbl3.FromDate和可能的tbl2.Number。

布賴恩

0

這是你的貼SQL重新組織,所以它會在更新工作:

UPDATE tbl2 
SET Field1 = 
    (
     SELECT TOP 1 
     tbl3.Field1 
     FROM tbl1 
     INNER JOIN tbl2 
     ON tbl1.id = tbl2.id 
     INNER JOIN tbl3 
     ON tbl2.Number = tbl3.Number 
     WHERE 
     tbl3.FromDate<tbl1.StartDate 
)