MySQL同表行对比:筛选含status=5的重复记录实现方法
方案1:支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)
单次扫表即可完成查询,性能更优:
SELECT name, surname, phone, email, status FROM ( SELECT *, -- 按四个匹配字段分区,判断当前分组是否存在status为5的记录 MAX(CASE WHEN status = 5 THEN 1 ELSE 0 END) OVER (PARTITION BY name, surname, email, phone) AS has_status_5 FROM 你的实际表名 ) t WHERE has_status_5 = 1;
方案2:兼容低版本数据库(如MySQL 5.x等不支持窗口函数的环境)
SELECT name, surname, phone, email, status FROM 你的实际表名 WHERE (name, surname, email, phone) IN ( -- 先查询所有存在status=5的四个字段组合 SELECT name, surname, email, phone FROM 你的实际表名 WHERE status = 5 );
效果验证
针对你提供的样例数据,两种写法都会返回Jonh Red对应的两条全部记录,完全匹配需求。
内容的提问来源于stack exchange,提问作者user2430364
相关产品推荐
相关产品推荐

