【发布时间】:2013-06-20 07:12:57
【问题描述】:
上下文:事件调度软件。
感谢this question 上关于查找重复值的回答,我提出了以下查询,它非常适合查找同时安排参加两个活动的用户:
SELECT *
FROM panel_participants pp
WHERE EXISTS
(
SELECT 1
FROM panel_participants pps
WHERE pp.user_id = pps.user_id
AND pp.day_time_slot_id = pps.day_time_slot_id
AND pp.day_time_slot_id > 0
LIMIT 1, 1
)
现在我需要的是一个非常相似的查询,但有一个区别:我想找到 pp.day_time_slot_id = pps.day_time_slot_id + 2 所在的项目(这将向我显示用户在哪里安排了两个连续的事件)。但是,这会返回零行:
SELECT *
FROM panel_participants pp
WHERE EXISTS
(
SELECT 1
FROM panel_participants pps
WHERE pp.user_id = pps.user_id
AND pp.day_time_slot_id = pps.day_time_slot_id + 2
AND pp.day_time_slot_id > 0
LIMIT 1, 1
)
而且我知道有些行应该符合条件,例如用户 503 被安排在时隙 23 和 25 中的项目。
我尝试根据对this question 的回复设置变量,但我认为我不了解变量是如何工作以及传入和传出查询的,因为我尝试的所有操作都返回错误或零行。我已经确认day_time_slot_id 是一个整数,以防万一。
帮助?
【问题讨论】:
-
向我们展示一些示例数据
-
请提供一些样本数据和预期结果
-
您的第一个查询似乎没有按照您的意愿执行。它正在记录并检查相同的记录是否出现在同一个表中。因为没有什么可以排除始终匹配自身的原始记录。假设您有面板 ID 之类的东西,很容易修复。
-
糟糕,对不起!我在与感冒作斗争时正在编辑它,并输入了旧版本的查询——应该是 SELECT *,而不是 SELECT pp.user_id。固定。