mysql DISTINCT 一些坑

本文探讨了在SQL查询中使用DISTINCT关键字进行去重时遇到的问题,尤其是在结合IN函数时的限制。作者分享了一个案例,即在多表查询中,期望仅去除特定字段的重复值,但发现DISTINCT应用到所有选择的字段。文章还提到了如何通过COUNT(DISTINCT)解决部分去重需求,以及在使用IN函数时遇到的查询数量限制。

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

最近公司有一个需求,根据某一个字段多表查询另一个字段的值,且要求不能重复。然后sql语句我就想到了DISTINCT,毕竟这是大家都知道去重sql 关键字。但是还是查到了重复的值,让你很生气有没有!话不多说,上sql:

SELECT DISTINCT map.BwHotelID,tel.BusinessState,map.HotelName,map.SourceID FROM `BW_HotelID_Map_ForAll` map 
LEFT JOIN BWWeb_VHotel tel ON map.BwHotelID = tel.VHotelID where  map.SourceHotelID = ‘13949486’

随度了一下,发现 DISTINCT 后面的字段都不能重复。很坑的有没有。我要BwHotelID这个字段不重复,但是我也想要HotelName这个啊! 后又度了一下,发现有网友说

count(DISTINCT map.BwHotelID)

就能去重了,经测试,真的可以哎!

然后我就高高兴兴的改了一下sql  改后的sql:

SELECT DISTINCT map.BwHotelID,tel.BusinessState,map.HotelName,map.SourceID FROM `BW_HotelID_Map_ForAll` map 
LEFT JOIN BWWeb_VHotel tel ON map.BwHotelID = tel.VHotelID where  map.SourceHotelID in('13949486',...)

然后发现,不论我的in()函数里面有多少个值,它都只能查出来一个。很无奈

只能不用in()函数了,然后苦逼的写了个程序,一个一个查询的。o(︶︿︶)o 唉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值