4

次の SQL クエリがあります。

UPDATE db1.dbo.oitems
SET f2 = oo.f2,
f3 = oo.f3,
f4 = oo.f4
FROM db1.dbo.oitems o
       INNER JOIN db2.dbo.oitems oo 
               ON o.orderid = oo.orderid

各テーブルは異なるデータベースにあり、列は同じですが、データは異なりますが、id は一致しますが、データは一致しません。テーブル内の列 f2、f3、f4 の値を設定したいだけです。2 番目のテーブルの値が同じ orderid の場合に更新します。上記のコマンドは影響を受ける行が 0 であると言っていますが、私のロジックの何が問題なのですか?

4

2 に答える 2

6

これを解決するには、2 つのオプションがあります。1 つ目は、このスレッドに対する別の回答で Gordon Linoff によって説明されました。2番目は次のようになります。

UPDATE o
SET f2 = oo.f2,
f3 = oo.f3,
f4 = oo.f4,
FROM db1.dbo.oitems o
INNER JOIN db2.dbo.oitems oo 
ON o.orderid = oo.orderid;

私はいくつかの理由で 2 番目を好みます。1 つの理由は、実行可能な SELECT ステートメントに到達するために をUPDATE o SET置き換えることができるためです。SELECTもう1つは、最初のオプションのように意図が隠されていないことです。LEFT OUTER や、最初のオプションでは提供されない他の結合タイプを使用することもできます。

このすべての詳細な説明については、http://sqlity.net/en/1595/a-join-a-day-update-delete/ および http://sqlity.net の残りの部分を確認し ください。 /en/1146/a-join-a-day-introduction/シリーズ。

于 2013-01-07T21:08:42.563 に答える
5

質問のクエリには構文エラーがあるため、実行されることに驚いています (set句の最後のコンマ)。クエリを次のように記述します。

UPDATE db1.dbo.oitems
    SET f2 = oo.f2,
        f3 = oo.f3,
        f4 = oo.f4
    FROM db2.dbo.oitems oo 
    WHERE oitems.orderid = oo.orderid
于 2013-01-07T20:37:37.950 に答える