0

您好,我对 mysql 查询(DQL)有疑问

桌子:

id| start | end   | day
-------------------------------
1 | 10:00 | 11:00 | 03-05-2013
2 | 11:00 | 12:00 | 03-05-2013
3 | 10:30 | 12:00 | 03-05-2013
4 | 13:00 | 14:00 | 03-05-2013
5 | 14:00 | 15:00 | 03-05-2013

结果,我只想获取(列:id,start,end)在开始和结束之间具有相同部分的行。因此,我想得到:

id| start | end   
------------------
1 | 10:00 | 11:00 
2 | 11:00 | 12:00 
3 | 10:30 | 12:00 

因为第 1 行和第 3 行之间的时间相同:10:30 和 11 并且第 2,3 行在 11:00 到 12:00 之间具有相同的时间

我希望很清楚我想得到什么作为输出。很高兴能在 DQL 语法中得到教义的答案。

4

1 回答 1

0

您需要自加入表并查找对之间的冲突

SELECT 
  t1.id,
  t1.start,
  t1.end
FROM table_name t1
JOIN table_name t2
WHERE
  t1.start < t2.end AND
  t2.start < t1.end AND
  t1.id <> t2.id AND
  t1.date = t2.date

您可以使用 SELECT DISTINCT 或 GROUP BY 来修剪输出中的重复项。

于 2013-07-02T20:21:26.503 回答