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

SQL查询如何获取仅在1个相同日期有共同预订的唯一邮箱对

正确SQL查询实现说明

原参考代码问题

你提供的起始代码存在3处明显错误:

  • 关联表名拼写错误:hotelboeking应为目标表HotelBooking
  • JOIN关联规则错误:不应该关联email字段(我们需要匹配不同邮箱的配对),也不存在tijdstip字段,应该按共同的dateOfBooking做关联
  • 缺少核心逻辑:没有统计两个邮箱的共同预订日期数量,也没有过滤恰好1个共同日期的条件

最终实现代码

SELECT 
    hb1.email AS email1,
    hb2.email AS email2
FROM HotelBooking hb1
INNER JOIN HotelBooking hb2
  ON hb1.dateOfBooking = hb2.dateOfBooking
  AND hb1.email < hb2.email
GROUP BY hb1.email, hb2.email
HAVING COUNT(DISTINCT hb1.dateOfBooking) = 1;

逻辑说明

  • 用hb1.email < hb2.email过滤同邮箱的无效配对,同时避免生成重复二元组(比如(a@xx.com,b@xx.com)和(b@xx.com,a@xx.com)只会保留1组),符合唯一二元组的要求
  • COUNT(DISTINCT hb1.dateOfBooking)统计两个邮箱的共同预订日期数量,=1的筛选条件恰好匹配「仅在1个相同日期有共同预订、排除多日期共同预订」的需求
  • 如果你需要同时返回对应的共同预订日期,可以在SELECT后追加MAX(hb1.dateOfBooking) AS common_booking_date,因为HAVING已经限定共同日期只有1个,MAX/MIN函数都可以准确取到该日期

内容的提问来源于stack exchange,提问作者Davin Vroegop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:54:02