MySQL两表连接查询返回重复结果,请求排查SQL问题
排查MySQL连接查询返回重复记录问题
我在MySQL中尝试通过连接两张表获取记录,但未得到预期结果。主表tblstationerystock仅有2条记录,然而查询返回了多条重复记录,烦请帮忙排查我的SQL语句问题。
主表内容:
查询结果:
我的SQL语句如下:
SELECT t1.txnid, t1.stationeryissueddate, t1.orderdate, t1.purpose as pur1, t1.status, t1.stationerytype, t1.stationeryqtyrqst, t1.stationeryqtyissued, t1.remark, t2.purpose as pur2 from tblstationerystock t1 join tblstationerytype t2 on t1.purpose = t2.purpose where t1.uin = 13218 order by t1.status desc
问题分析与解决
- 重复原因:连接条件
t1.purpose = t2.purpose导致主表的每条记录,会和tblstationerytype中所有purpose值匹配的记录关联一次。如果tblstationerytype里同一个purpose对应多条行,就会生成多条重复的主表记录。 - 解决方案:
- 清理冗余数据:如果
tblstationerytype中同一purpose存在多条记录是不合理的,先删除冗余行,确保每个purpose唯一。 - 添加去重关键字:如果业务允许关联后的重复,但只需要主表记录不重复,在
SELECT后加DISTINCT:SELECT DISTINCT t1.txnid, t1.stationeryissueddate, t1.orderdate, t1.purpose as pur1, t1.status, t1.stationerytype, t1.stationeryqtyrqst, t1.stationeryqtyissued, t1.remark, t2.purpose as pur2 from tblstationerystock t1 join tblstationerytype t2 on t1.purpose = t2.purpose where t1.uin = 13218 order by t1.status desc - 调整关联逻辑:如果不需要
t2.purpose字段,可考虑移除tblstationerytype的连接;如果是要关联文具类型信息,应该用更精准的关联键(比如文具类型ID),而非模糊的purpose字段。
- 清理冗余数据:如果
内容的提问来源于stack exchange,提问作者DK JOSHI
相关产品推荐
相关产品推荐

