You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL两表连接查询返回重复结果,请求排查SQL问题

排查MySQL连接查询返回重复记录问题

我在MySQL中尝试通过连接两张表获取记录,但未得到预期结果。主表tblstationerystock仅有2条记录,然而查询返回了多条重复记录,烦请帮忙排查我的SQL语句问题。

主表内容:
主表内容-tblstationerystock

查询结果:
查询结果

我的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对应多条行,就会生成多条重复的主表记录。
  • 解决方案:
    1. 清理冗余数据:如果tblstationerytype中同一purpose存在多条记录是不合理的,先删除冗余行,确保每个purpose唯一。
    2. 添加去重关键字:如果业务允许关联后的重复,但只需要主表记录不重复,在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
      
    3. 调整关联逻辑:如果不需要t2.purpose字段,可考虑移除tblstationerytype的连接;如果是要关联文具类型信息,应该用更精准的关联键(比如文具类型ID),而非模糊的purpose字段。

内容的提问来源于stack exchange,提问作者DK JOSHI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:15:06