我有两张桌子。
模板表。(templ_id
和obj_id
是主键)
templ_id obj_id
TP000002 PE554959
TP000003 PE555867
TP000006 PE555102
TP000009 PE554994
TP000009 PE554956
TP000009 PE555176
TP000009 PE555598
TP000009 PE555256
TP000010 PE555297
TP000010 PE555286
业务表。(bsn_no
是主键)
bsn_no obj_id templ_id
1 PE554959 null
2 PE555867 null
3 PE555102 null
4 PE554994 null
5 PE554956 null
6 PE555176 null
7 PE555598 null
8 PE555256 null
9 PE555297 null
10 PE555286 null
我想使用单个更新查询基于templ_id
从模板表templ_id
更新业务表obj_id
。
答案 0 :(得分:1)
您可以使用相关子查询执行此操作:
update bsn_no
set templ_id = (select t.templ_id
from template_table t
where t.obj_id = bsn_no.obj_id
);
这是标准SQL,应该可以在任何数据库中使用(尽管如果obj_id
中有重复的template_table
,它将返回错误)。特定数据库具有用于组合update
中的表的其他语法。
编辑:
如果返回多行,最简单的解决方案是聚合,不用 group by
或使用where rownum = 1
:
update bsn_no
set templ_id = (select t.templ_id
from template_table t
where t.obj_id = bsn_no.obj_id and rownum = 1
);
这可以通过选择(任意)匹配值来避免错误。
答案 1 :(得分:1)
UPDATE BusinessTable
SET BusinessTable.templ_id = (SELECT TemplateTable.templ_id
FROM TemplateTable
WHERE BusinessTable.obj_id = TemplateTable.obj.id )
如果ID相同,您可以对子查询进行分组:
UPDATE BusinessTable
SET BusinessTable.templ_id = (SELECT TemplateTable.templ_id
FROM TemplateTable
WHERE BusinessTable.obj_id = TemplateTable.obj.id
GROUP BY Template.templ_id
)
答案 2 :(得分:0)
UPDATE BT
SET templ_ID = TT.templ_ID
FROM [Business Table] BT
INNER JOIN [Template Table] TT ON BT.obj_id = TT.obj_id