更新过程中的每一行
我在表 TABLE1
DOCUMENT ------ FIELD1
中有以下数据 12345
23456
34567
45678
98765
我在视图 VIEW1
DOCUMENT ---- BUS 中有以下数据
12345 ------------ 5
23456 ------------ 6
34567 ------------ 8
45678 ------------ 12
98765 ------------ 14
我想做的是更新每一行
if (table1.document = view1.document)
然后 table1.field1 = view1.bus
任何见解都会有帮助。
谢谢。
I have the following data in a table TABLE1
DOCUMENT ------ FIELD1
12345
23456
34567
45678
98765
i have the following data in a view VIEW1
DOCUMENT ---- BUS
12345 ------------ 5
23456 ------------ 6
34567 ------------ 8
45678 ------------ 12
98765 ------------ 14
What i would like to do is update each row
if (table1.document = view1.document)
then
table1.field1 = view1.bus
Any insight will help.
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这可以使用纯 SQL 来完成,无需任何过程:
或者,如果您的数据库允许:
That can be done using plain SQL, no procedures required:
Or, if your database allows it:
正如 Dan 所说,但在 MS SQL Server 中,我发现这种样式更易于阅读:
请注意,如果 VIEW1 对于给定的 TABLE1 行 [DOCUMENT] 值可以有多个行,那么选择更新 TABLE1 的 [BUS] 值将是随机的,在匹配集。 (如果是这种情况,可以修改查询以选择 MAX / MIN / 等。)
我将优化此查询,以不更新任何已与 BUS 值匹配的行,这将使其在重新运行时更快,从而使某些值更快 如果该字段已存在于 TABLE1 中,
则如果该字段定义为不允许 NULL,则可以省略 NULL / NOT NULL 测试。
As Dan said, but in MS SQL Server I find this styling easier to read:
Note that if VIEW1 could have multiple rows for a given TABLE1 row [DOCUMENT] value then the [BUS] value choosen to update TABLE1 will be random, within the matching set. (If this is the case the query could be modified to choose MAX / MIN / etc.)
I would refine this query to NOT update any rows that already matched the BUS value, which will make it faster if it is rerun and thus some values already exist in TABLE1
you can leave out the NULL / NOT NULL tests if the field is defined as not allowing NULLs.