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

MySQL查询:选取bookingid相同的酒店预订表数据

找出所有bookingid重复的酒店预订记录

要获取表中所有属于重复bookingid的记录,这里有几种实用的MySQL查询方法,你可以根据自己的MySQL版本和表的大小选择合适的方式:

方法1:使用子查询+IN子句

这是最直观的写法,先筛选出出现多次的bookingid,再匹配原表的记录:

SELECT *
FROM your_table_name
WHERE bookingid IN (
    SELECT bookingid
    FROM your_table_name
    GROUP BY bookingid
    HAVING COUNT(*) > 1
);

原理:内层子查询通过GROUP BY bookingid分组,并用HAVING COUNT(*) > 1筛选出出现次数超过1的bookingid;外层查询则把这些bookingid对应的所有记录都提取出来。

方法2:使用JOIN关联子查询

如果你的表数据量较大,JOIN的方式通常比IN子句性能更优:

SELECT t.*
FROM your_table_name t
JOIN (
    SELECT bookingid
    FROM your_table_name
    GROUP BY bookingid
    HAVING COUNT(*) > 1
) dup ON t.bookingid = dup.bookingid;

原理:和方法1逻辑一致,只是用JOIN替代IN来关联原表和重复bookingid的集合,在大数据量下执行效率更高。

方法3:使用窗口函数(MySQL 8.0+适用)

如果你使用的是MySQL 8.0及以上版本,窗口函数可以让写法更简洁,不需要额外的关联操作:

SELECT id, room, night, bookingid, timestamp
FROM (
    SELECT *,
           COUNT(*) OVER(PARTITION BY bookingid) AS booking_count
    FROM your_table_name
) sub
WHERE booking_count > 1;

原理:内层查询用COUNT(*) OVER(PARTITION BY bookingid)计算每个bookingid对应的记录总数,外层直接筛选出总数大于1的记录即可。

注意事项

记得把查询中的your_table_name替换成你实际的酒店预订表名称哦~

内容的提问来源于stack exchange,提问作者Salwa El Bannan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:44:36