我需要找到基于列A的重复行,在表中,列B的数据不同。然后,我需要更新列B,以便它具有相同的数据基于> 0以上的数据。如果一条记录的列B = 0000,另一条记录的列B = 1234,则将第一条记录列B更新为1234.查找具有相同Card#的记录,如果其中一条记录的ID为零,则更新它以匹配另一个记录。根据重复记录的列更新记录的列
0
A
回答
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应该是到处都一样,你需要两个表:
- 你现在使用的一个,但没有ID列
- ,仅仅有
(card_number, ID)
然后在您需要的ID号的任何查询新表,你可以用一个JOIN
与其他表得到它。这种方式完全不可能在同一张卡上有两个不同的号码文件;即使卡上有多条记录,也只有一个地方可以记录该号码。
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
子句确保有实际的重复项。
相关问题
- 1. 根据以前的记录更新列
- 2. 根据记录号更新列
- 3. 根据单个列中的重复值返回记录(多列)
- 4. SQL根据重复记录选择最新记录
- 5. 记录中的更新列
- 6. 更新重复记录
- 7. 更新重复记录
- 8. 更新重复记录
- 9. 根据列分隔记录
- 10. 根据表2中的重复项更新记录
- 11. 导轨 - activeadmin,在更新的“父”记录重复的has_many记录
- 12. SQL重新序列记录
- 13. 如何根据BigQuery中的特定列去重复记录?
- 14. 根据另一列的值插入重复记录
- 15. 查看重复记录的记录,创建新记录之前
- 16. 根据LINQ中插入记录的ID更新记录到SQL
- 17. 根据另一张表中的记录更新连续的列
- 18. 根据当前记录值和先前记录值更新字段/列
- 19. Mysql,更新多记录列
- 20. 更新同一表中的重复记录或类似记录
- 21. 根据一条记录的列值选择多条记录
- 22. 根据另一个表中的相关列更新记录
- 23. 根据时间更新删除重复记录
- 24. 更新列表视图记录重复的Android
- 25. 如何更新mysql中所有重复记录的列?
- 26. Rails如何更新所有记录的列为零的记录?
- 27. 根据日期重复记录 - 导轨
- 28. 更新与上次重复记录的条目重复更新
- 29. 重复的记录,并为该列名
- 30. 删除列表中的重复记录
请显示你已经尝试过 – noscreenname