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

これは投稿された 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 に答える
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 のインデックスを作成することを検討します。

ブライアン

于 2013-02-07T20:23:59.233 に答える