表TABLE1中有以下数据
文件------ FIELD1
12345个
23456个
34567个
45678个
98765
我在视图VIEW1
中有以下数据文件----公交车
12345 ------------ 5
23456 ------------ 6
34567 ------------ 8
45678 ------------ 12
98765 ------------ 14
我想做的是更新每一行
if(table1.document = view1.document)
然后
table1.field1 = view1.bus
任何见解都会有所帮助。
谢谢。
答案 0 :(得分: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
答案 1 :(得分:1)
正如丹所说,但在MS SQL Server中,我发现这种样式更容易阅读:
UPDATE U SET U.field1 = V.bus FROM table1 AS U JOIN view1 AS V ON V.document = U.document
请注意,如果VIEW1对于给定的TABLE1行[DOCUMENT]值可以有多行,则选择更新的[BUS]值将在匹配集内随机更新TABLE1。 (如果是这种情况,可以修改查询以选择MAX / MIN /等。)
我会优化这个查询,以便不更新已经匹配BUS值的任何行,如果它重新运行会使它更快,因此TABLE1中已经存在一些值
UPDATE U SET U.field1 = V.bus FROM table1 AS U JOIN view1 AS V ON V.document = U.document WHERE U.field1 = V.bus OR (U.field1 IS NOT NULL AND V.bus IS NULL) OR (U.field1 IS NULL AND V.bus IS NOT NULL)
如果字段定义为不允许NULL,则可以省略NULL / NOT NULL测试。