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 更新 tbl2 中每一行的 Field1,但出现错误:

操作必须使用可更新的查询。

我做错了什么?

4

3 回答 3

1

因为连接语法的更新因数据库而异,所以我通常使用:

UPDATE tbl2
    SET tbl2.Field1 =  . . .
    from tbl1
    where tbl1.id = tbl2.id
于 2013-02-07T14:04:36.330 回答
0

根据您上面的描述,不需要通过join进行更新。怎么样:

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。

布赖恩

于 2013-02-07T20:23:59.233 回答
0

这是您发布的 SQL 重新组织,因此它将在 UPDATE 中工作:

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
)
于 2013-02-07T21:11:04.523 回答