MySQL无唯一ID时如何删除冗余Amount=0行
解决无唯一ID的MySQL表删除指定记录问题
需求:删除表中存在非0 Amount记录的ClientID对应的所有Amount=0的行;保留那些仅存在Amount=0记录的ClientID的行。
方法一:MySQL 8.0+ 用窗口函数实现
DELETE t FROM ( SELECT ClientID, Amount, COUNT(CASE WHEN Amount != 0 THEN 1 END) OVER (PARTITION BY ClientID) AS has_non_zero FROM your_table_name ) t WHERE t.Amount = 0 AND t.has_non_zero > 0;
说明:通过窗口函数COUNT(...) OVER (PARTITION BY ClientID)统计每个ClientID下的非0记录数,若该数值大于0,就删除该ClientID下所有Amount=0的行。
方法二:兼容低版本MySQL(无窗口函数)
DELETE FROM your_table_name WHERE Amount = 0 AND ClientID IN ( SELECT DISTINCT ClientID FROM your_table_name WHERE Amount != 0 );
说明:先通过子查询筛选出所有存在非0金额的ClientID列表,再删除这些ClientID中金额为0的记录。
验证示例
用你提供的测试数据执行上述任一语句后,会删除QER1、QER2对应的Amount=0行,保留QER3的0值行及所有非0记录,与预期输出一致。
内容的提问来源于stack exchange,提问作者matdlara
相关产品推荐
相关产品推荐

