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

时间:2015-04-14 14:55:19

标签: mysql

我有一张包含以下colomn

的表格

ID TAG VALUE

表格中的值是这样的

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。

提前致谢

2 个答案:

答案 0 :(得分:1)

http://sqlfiddle.com/#!9/40f442/1

UPDATE table1
INNER JOIN (
  SELECT * 
  FROM table1) t
  ON t.tag=table1.tag 
  AND t.val != table1.val
  AND t.id > table1.id
SET table1.val = t.val

答案 1 :(得分:0)

答案仍然是使用连接,但它是这样的:

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;

Here's a fiddle

如果您有多个具有相同标记但具有不同ID的行,则可能需要多次运行它。如果这是一个重大问题,只需发表评论,我就会提出不同的问题 - 这只是一个快速简便的解决方案。

修改

这是一个稍微复杂但更有效的解决方案。这会将ID较低的所有标签更新为带有MAX ID的标签值。

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

alternate fiddle