如何使用SQL提取拥有多条预订记录的唯一ID列表?
提取拥有多条预订记录的唯一ID的SQL解法
你的原SQL没法得到正确结果,核心问题是没加GROUP BY分组——HAVING子句得配合分组操作才能针对每个ID单独统计记录数,直接用的话COUNT(ID)算的是整张表的总条数,肯定不对。
下面给两种可行的解决方法:
方法一:GROUP BY + HAVING(最常用)
按ID分组后,筛选出分组内记录数大于1的ID即可,这是最直接的写法:
SELECT ID FROM bookings GROUP BY ID HAVING COUNT(*) > 1;
这里用COUNT(*)或者COUNT(BOOKING_NUM)都可以,因为每条预订的BOOKING_NUM都是有效的非空值,都能统计出每个ID的预订数量。
方法二:子查询配合IN/EXISTS
如果后续需要扩展查询逻辑(比如关联其他表),可以用子查询先定位出符合条件的ID,再进行筛选:
用IN的写法
SELECT DISTINCT ID FROM bookings WHERE ID IN ( SELECT ID FROM bookings GROUP BY ID HAVING COUNT(*) > 1 );
用EXISTS的写法
SELECT DISTINCT b1.ID FROM bookings b1 WHERE EXISTS ( SELECT 1 FROM bookings b2 WHERE b1.ID = b2.ID AND b1.BOOKING_NUM != b2.BOOKING_NUM );
这种方式是通过检查当前ID是否存在其他不同的预订记录,来判断是否属于多条预订的情况。
内容的提问来源于stack exchange,提问作者learning to code
相关产品推荐
相关产品推荐

