1

我在表 TABLE1 中有以下数据

文件 ------ FIELD1
12345
23456
34567
45678
98765

我在视图 VIEW1 中有以下数据

文件 ---- BUS
12345 ------------ 5
23456 ------------ 6
34567 ------------ 8
45678 - ------------ 12
98765 ------------ 14

我想做的是更新每一行

如果 (table1.document = view1.document)
那么 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

正如 Dan 所说,但在 MS SQL Server 中,我发现这种样式更易于阅读:

更新你
SET U.field1 = V.bus
从表 1 作为 U
    加入视图 1 作为 V
       ON V.document = U.document

请注意,如果 VIEW1 对于给定的 TABLE1 行 [DOCUMENT] 值可能有多行,则选择用于更新 TABLE1 的 [BUS] 值将是随机的,在匹配集中。(如果是这种情况,可以修改查询以选择 MAX / MIN / 等。)

我将优化此查询以不更新任何已经与 BUS 值匹配的行,如果重新运行它会使其更快,因此 TABLE1 中已经存在一些值

更新你
SET U.field1 = V.bus
从表 1 作为 U
    加入视图 1 作为 V
       ON V.document = U.document
其中 U.field1 = V.bus
      或(U.field1 不为空且 V.bus 为空)
      或(U.field1 为空且 V.bus 不为空)

如果字段被定义为不允许 NULL,您可以省略 NULL / NOT NULL 测试。

于 2009-11-10T16:22:26.173 回答