Mysql 子查询删除数据的问题

这篇博客探讨了在MySQL中删除具有唯一键的表中重复记录的问题。由于MySQL不直接支持子查询删除,作者提出了一个替代方案,通过自连接和子查询来定位并删除重复项。对于没有唯一键的情况,建议使用脚本配合SQL或添加临时唯一字段来解决。内容涵盖了SQL查询技巧和数据清理策略。
摘要由CSDN通过智能技术生成

有唯一键的情况:

直接子查询结果删除Mysql不支持的(Oracle 倒是可以)

DELETE 
FROM
	need_delete_table 
WHERE
	need_delete_table.lsh IN (
	SELECT
		t.lsh 
	FROM
		need_delete_table t 
	WHERE
		t.RENYUANBIAOSHI IN ( SELECT z.RENYUANBIAOSHI FROM need_delete_table z GROUP BY z.RENYUANBIAOSHI HAVING count( t.RENYUANBIAOSHI ) > 1 ) 
		AND t.lsh NOT IN ( SELECT max( x.lsh ) FROM need_delete_table x GROUP BY x.RENYUANBIAOSHI HAVING count( x.RENYUANBIAOSHI ) > 1 ) 
--	AND t.RENYUANBIAOSHI = '100007938' 
	)

可以尝试以下方式:

delete from need_delete_table where lsh in 

(
select n.lsh from (

select t.lsh from need_delete_table t 
where t.id in (
select z.id from need_delete_table z 
GROUP BY z.id 
HAVING count(z.id ) > 1 
)
and t.lsh not in (
 select max(x.lsh) from need_delete_table x 
GROUP BY x.id 
HAVING count(x.id ) > 1 
)
--  and t.id = '100007938'


) as n
);

 

 

无唯一键的情况:

暂时只能想到用脚本和SQL组合删除.

或者考虑使用添加个临时字段作为唯一键,使用上面的方式处理.

代码 待补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值