MySQL技术问询:查找被MIKE与其他用户共用的CARDNUMBER记录
解决方案:识别被MIKE克隆的客户卡号
需求明确
需要找出MIKE使用过、且同时被其他非MIKE用户使用的CARDNUMBER,这些卡号即为被克隆的目标,对应真实客户的ID被MIKE盗用创建虚假销售记录。
方案1:获取被克隆卡号及对应真实用户信息
该查询返回被克隆的卡号、真实用户名,以及MIKE使用该卡号的门店记录:
SELECT DISTINCT c.CARDNUMBER, c.NAME AS 真实用户名, m.SHOPNUMBER AS MIKE使用门店号 FROM 你的表名 c JOIN 你的表名 m ON c.CARDNUMBER = m.CARDNUMBER WHERE c.NAME != 'MIKE' AND m.NAME = 'MIKE' ORDER BY c.CARDNUMBER;
方案2:快速筛选所有被克隆的卡号
若仅需卡号列表,此语句更简洁高效:
SELECT CARDNUMBER FROM 你的表名 GROUP BY CARDNUMBER HAVING COUNT(DISTINCT NAME) > 1 AND SUM(CASE WHEN NAME = 'MIKE' THEN 1 ELSE 0 END) > 0;
方案3:查看所有关联记录(真实+克隆)
若需完整查看每个被克隆卡号的所有使用记录(含真实客户和MIKE的虚假记录):
SELECT ID, NAME, CARDNUMBER, SHOPNUMBER, CASE WHEN NAME = 'MIKE' THEN '克隆记录' ELSE '真实用户记录' END AS 记录类型 FROM 你的表名 WHERE CARDNUMBER IN ( SELECT CARDNUMBER FROM 你的表名 GROUP BY CARDNUMBER HAVING COUNT(DISTINCT NAME) > 1 AND SUM(CASE WHEN NAME = 'MIKE' THEN 1 ELSE 0 END) > 0 ) ORDER BY CARDNUMBER, NAME;
性能优化建议
针对50K条数据的场景,建议先给CARDNUMBER字段创建索引,提升查询速度:
CREATE INDEX idx_cards_carnumber ON 你的表名(CARDNUMBER);
内容的提问来源于stack exchange,提问作者DANIEL
相关产品推荐
相关产品推荐

