如何在MySQL中比较表的两个不同行

维克拉姆·阿南德·布珊(Vikram Anand Bhushan)

我有一张桌子,下面的柱子

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章