1

表に次のデータがありますTABLE1

ドキュメント------
FIELD112345
23456
34567
45678
98765

ビューVIEW1に次のデータがあります

ドキュメント----バス
12345------------5
23456 ------------ 6
34567 ------------ 8
45678- ----------- 12
98765 ------------ 14

私がしたいのは、各行を更新することです

if(table1.document = view1.document)
then table1.field1 = view1.bus

どんな洞察も役に立ちます。

ありがとうございました。

4

2 に答える 2

2

これはプレーンSQLを使用して実行でき、手順は必要ありません。

UPDATE table1 SET field1 = (SELECT bus FROM view1 WHERE table1.document = view1.document)

または、データベースで許可されている場合:

UPDATE (select table1.field1, view1.bus FROM table1 JOIN view1 ON table1.document = view1.document) SET table1.field1 = view1.bus
于 2009-11-10T16:13:00.530 に答える
1

ダンが言ったように、しかしMS SQL Serverでは、このスタイルは読みやすいと思います。

更新U
SET U.field1 = V.bus
FROM table1 AS U
    view1ASVに参加する
       ON V.document = U.document

VIEW1が特定のTABLE1行[DOCUMENT]値に対して複数の行を持つ可能性がある場合、TABLE1を更新するために選択された[BUS]値は、一致するセット内でランダムになることに注意してください。(この場合、クエリを変更してMAX / MINなどを選択できます。)

このクエリを改良して、BUS値にすでに一致する行を更新しないようにします。これにより、再実行され、一部の値がTABLE1にすでに存在する場合に高速になります。

更新U
SET U.field1 = V.bus
FROM table1 AS U
    view1ASVに参加する
       ON V.document = U.document
WHERE U.field1 = V.bus
      または(U.field1はNULLではなく、V.busはNULLです)
      または(U.field1がNULLで、V.busがNULLではない)

フィールドがNULLを許可しないように定義されている場合は、NULL /NOTNULLテストを省略できます。

于 2009-11-10T16:22:26.173 に答える