我需要在表格中找到基于列A的重复行,这些行具有列B的不同数据。然后我需要更新列B,使其具有相同的数据,基于>比零数据。如果一个记录的列B = 0000,而另一个记录的列B = 1234,则将第一个记录列B更新为1234.查找具有相同卡号的记录#,如果其中一个记录的ID为零,则更新它以匹配另一条记录。
答案 0 :(得分:0)
在MySQL中,您不能拥有同时从同一个表中检索数据的UPDATE
,因此您必须在临时表中复制其他数据(或者以完全不同的方式)。
这样的事情:
CREATE TEMPORARY TABLE duplicate_ids AS (
SELECT card_number, id
FROM the_table AS t1
INNER JOIN the_table AS t2 ON (t1.card_number = t2.card_number and t2.id > t1.id)
WHERE t1.id = '0000'
);
UPDATE the_table
INNER JOIN duplicate_ids ON the_table.card_number = duplicate_ids.card_number
SET the_table.id = duplicate_ids.id;
大概你在交易中这样做。
另外,如果您可以控制数据库模式,则应该消除发生此类重复的可能性。如果您的表可以有多个相同卡号的实例,但ID应该在任何地方都相同,则需要两个表:
(card_number, ID)
然后,在您需要ID号的任何查询中,您可以使用JOIN
从其他表中获取ID号。这样,完全不可能在同一张卡上存档两个不同的号码;即使该卡有多个记录,也只有一个记录该号码的地方。
答案 1 :(得分:0)
我会这样做:
update t join
(select t.cardnum, max(b) as maxb
from t
group by t.cardnum
having count(distinct b) > 1
) tt
on t.cardnum = tt.cardnum
set t.b = tt.maxb
where t.b <> tt.maxb;
子查询获取替换值。 having
子句确保实际重复。