首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MySQL检测资源调度冲突

用MySQL检测资源调度冲突
EN

Database Administration用户
提问于 2018-04-16 11:01:22
回答 1查看 859关注 0票数 2

如何查询以下三个表以检测资源调度冲突?当两个日期/时间范围重叠的events需要共同的participants时,就会发生冲突。

代码语言:javascript
复制
CREATE TABLE `events` (
  id int(11) AUTO_INCREMENT,
  `date` date,               # date on which the event occurs
  start_minute smallint(6),  # minute of day on which event starts
  end_minute smallint(6),    # minute of day on which event ends
);

CREATE TABLE participants (
  id int(11) AUTO_INCREMENT,
  `name` varchar(255),
);

CREATE TABLE event_participations (
  event int(11),             # refers to events.id
  participant int(11),       # refers to participants.id
  PRIMARY KEY (event,participant)
);

我认为以下查询将检测到重叠事件:

代码语言:javascript
复制
SELECT *
FROM events e CROSS JOIN events e2
WHERE e.date=e2.date AND e.start_minute<e2.end_minute AND e2.start_minute<e.end_minute

但是,重叠并不意味着冲突,因为两个events可能涉及相互排斥的participants集。如何查询同时需要相同参与者的事件对?

EN

回答 1

Database Administration用户

发布于 2018-04-16 13:04:48

要么像这样:

代码语言:javascript
复制
SELECT DISTINCT 
'this events and participations overlap',
e.*
FROM events e 
JOIN event_participations ep ON e.id = ep.event
WHERE EXISTS (SELECT 1 
              FROM events e2
              JOIN event_participations ep2 ON e2.id = ep2.event 
              WHERE e.date = e2.date 
                AND e2.start_minute < e.end_minute 
                AND e2.end_minute > e.start_minute
                AND ep2.participant = ep.participant
             )

或者像这样:

代码语言:javascript
复制
SELECT DISTINCT 
'this events and participations overlap',
e.*
FROM events e 
JOIN event_participations ep ON e.id = ep.event
JOIN events e2 ON  e.date = e2.date 
               AND e2.start_minute < e.end_minute 
               AND e2.end_minute > e.start_minute
JOIN event_participations ep2 ON e2.id = ep2.event 
WHERE ep2.participant = ep.participant

关于EXISTS的好处是,它一碰到就停止搜索。JOIN方法构建整个数据集。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/204060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档