由于写代码的疏忽,可能会导致数据库多出一条重复的记录,这时需要找到重复的记录把其中一条删除,例如查找以下数据表多出了的parent_order_id相同并且备注为某某某获得奖励的记录
CREATE TABLE `x_fenxiao_reward` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` int(10) unsigned NOT NULL COMMENT '总部id',
`parent_order_id` int(10) unsigned NOT NULL COMMENT 'x_ordinary_pay_record表id',
`sub_order_id` int(10) unsigned NOT NULL COMMENT 'x_ordinary_pay_goods表id',
`state` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '0:未结算 1:冻结(发生退款退货) 2:已结算 3:作废',
`confirm_time` int(10) unsigned NOT NULL COMMENT '自动结算时间:确认收货的时间点+结算的时间间隔fenxiao_settlement_day(转为秒)',
`reward_level_1` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '业务员的佣金',
`reward_level_1_client_code` varchar(10) NOT NULL DEFAULT '' COMMENT '业务员的邀请码',
`last_update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最近更新时间',
`end_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最终结算时间',
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '推广备注(用于关注人推广,签到推广)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2915 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='业务员佣金明细表';
利用临时表、子查询、count函数和group by结合,整理出来的语句为
SELECT * FROM x_fenxiao_reward WHERE id in(
SELECT
id
FROM
(
SELECT
parent_order_id,
COUNT(*) AS count
FROM
x_fenxiao_reward
WHERE
state = '0'
GROUP BY
parent_order_id
HAVING
count = 2
) AS result
LEFT JOIN x_fenxiao_reward ON x_fenxiao_reward.parent_order_id = result.parent_order_id
) AND remark LIKE '%获得的奖励记录%'