我有一张桌子,下面的柱子
ID标记值
表中的值是这样的
1 ac.id 12345
1 ac.title xyz
2 ac.id 12345
2. ac.title Yo its the title
在这种情况下,我想比较具有相同标签的两个不同ID的值,如果值不同,则更新较小的ID
例如
ac.title的值在id 2和1中是不同的,所以我将用2更新1的值。
提前致谢
答案仍然是使用联接,但是它是这样的:
update test t1
left join test t2
on t1.id < t2.id
and t1.name = t2.name
set t1.value = t2.value
where t2.id is not null;
如果有几行带有相同标签但ID不同的行,则可能需要运行多次。如果那是一个重要的问题,请发表评论,然后我将提出不同的查询-这只是快速简便的解决方案。
编辑
这是稍微复杂但更有效的解决方案。这样会将ID较低的所有标签更新为ID为MAX的标签值。
update test t1
inner join
(
select q1.*, t2.value from
(
select max(id) id, name
from test
group by name
) q1
inner join test t2
on q1.id = t2.id
and q1.name = t2.name
) m
on t1.name = m.name
and t1.id < m.id
set t1.value = m.value
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句