数据库sql因为左右连接出现多条重复数据(distinct和group by)

本文介绍了SQL查询中如何使用`DISTINCT`关键字进行去重,并强调在`ORDER BY`子句中包含用于排序的字段。此外,还提供了一种使用`GROUP BY`作为替代去重的方法,但需要注意`GROUP BY`需要包含所有字段。这些技巧对于提升查询效率和数据准确性至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决办法:

select distinct t.rid,
                t1.unitname,
                t.username,
                t.user_no,
                t.IF_REVEAL,
                '' as type,
                '' as typeName,
                t2.ZONE_GB, t1.UNIT_CODE
  from TS_USER_INFO t
  left join ts_unit t1 on t.unit_rid = t1.rid
  left join ts_zone t2 on t1.zone_id = t2.rid
  left join TS_USER_ROLE t3 on t.rid = t3.user_info_id
  left join ts_role t4 on t3.role_id = t4.rid
 where 1 = 1
   AND T2.ZONE_GB LIKE '2201%'
   AND T.IF_REVEAL = '1'
 ORDER BY t2.ZONE_GB, t1.UNIT_CODE, T.USER_NO

特别注意:1.在查询之前用distinct去重

                   2.有order by 的时候,select 后面需加上order by后面的字段,如红色字体部分

解决方法2:使用group by

select  t.rid,
                t1.unitname,
                t.username,
                t.user_no,
                t.IF_REVEAL,
                '' as type,
                '' as typeName,
                t2.ZONE_GB,
                t1.UNIT_CODE
  from TS_USER_INFO t
  left join ts_unit t1 on t.unit_rid = t1.rid
  left join ts_zone t2 on t1.zone_id = t2.rid
  left join TS_USER_ROLE t3 on t.rid = t3.user_info_id
  left join ts_role t4 on t3.role_id = t4.rid
 where 1 = 1
   AND T2.ZONE_GB LIKE '2201%'
   AND T.IF_REVEAL = '1'
   GROUP BY T.RID, 
                t1.unitname,
                t.username,
                t.user_no,
                t.IF_REVEAL,
                t2.ZONE_GB,
                t1.UNIT_CODE
   ORDER BY t2.ZONE_GB, t1.UNIT_CODE,T.USER_NO

注意:这边group by好像必须加上所有的字段,不然无法运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值