我有一张包含以下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。
提前致谢
答案 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;
如果您有多个具有相同标记但具有不同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