我会尝试解释我的“问题”
我有两张桌子
Table1
id parent_id name active
2008 10 name0 Y
200801 2008 child of name0 Y
200802 2008 child of name0 Y
201102 10434344 child of name0 Y
Table2
old_id new_id name active id_father_new
2008 10 name0 N 0
200801 202101 child of name0 N 2021
200802 202102 child of name0 N 2021
2011 10 new name0 Y 0
201101 201101 child of new name0 Y 2011
201102 10434344 child of name0 Y 2011
201102 201103 child of new name0 Y 2011
你怎么看,第一个表有一些id,id_parent和active字段。 另一个在table1中添加相同的列和新信息以及新记录。
table2中的所有新记录都插入到带有左连接的table1中,现在我需要在table1中使用table2中的信息进行更新,但前提是table2中的 active 字段为Y
更新了id,id_parent和活动字段,如果table2中的活动字段为N,则只更新table1中的活动字段
所以,table1应该是这样的:
Table1
id parent_id name active
2008 10 name0 N
200801 2008 child of name0 N
200802 2008 child of name0 N
201102 2011 child of name0 Y
10434344 2011 child of name0 Y
2011 10 new name0 Y
201101 2011 child of new name0 Y
201103 2011 child of new name0 Y
前三个记录中的仅将活动字段更改为N,因为在表2中它们是活动的= N
如果我这样做:
update u
set u.id = s.new_id,
u.parent_id = s.new_father_id,
u.active = s.active
from table1 u
inner join table2 s on u.new_id = s.old_id
where s.active like 'Y'
显然只更新active = Y的行,并且三个第一列保留相同的值,因此必须对字段激活进行另一次更新:
update u
set u.active = s.active
from table1 u
inner join table2 s on u.new_id = s.old_id
最大的问题是,¿只有一次更新才能实现这一目标吗?可能还有游标? CASE语句集合?或只是两个更新,它在sql
的良好实践中是可接受的感谢您的时间