【问题标题】:Available appointments可预约
【发布时间】:2012-09-06 19:34:31
【问题描述】:

我有两个 mysql 表,日程表和约会。在日程表中有定义的医生终端,而在其他有预定的约会。问题是医生总是可以更改他的终端,我不能在约会表中粘贴参考,我只想在一个 mysql 查询中为两位医生获取可用的终端。那可能吗?

CREATE TABLE `schedule` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `from` timestamp NULL DEFAULT NULL,
  `to` timestamp NULL DEFAULT NULL,
  `doctor_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;


INSERT INTO `schedule` (`id`, `from`, `to`, `doctor_id`)
VALUES
    (1, '2012-09-06 14:00:00', '2012-09-06 14:59:59', 1),
    (2, '2012-09-06 15:00:00', '2012-09-06 15:59:59', 1),
    (3, '2012-09-06 16:00:00', '2012-09-06 16:59:59', 1),
    (4, '2012-09-06 17:00:00', '2012-09-06 17:59:59', 1),
    (5, '2012-09-06 14:00:00', '2012-09-06 14:59:59', 2),
    (6, '2012-09-06 15:00:00', '2012-09-06 15:59:59', 2),
    (7, '2012-09-06 16:00:00', '2012-09-06 16:59:59', 2),
    (8, '2012-09-06 17:00:00', '2012-09-06 17:59:59', 2);

CREATE TABLE `appointments` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `from` timestamp NULL DEFAULT NULL,
  `to` timestamp NULL DEFAULT NULL,
  `doctor_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;


INSERT INTO `appointments` (`id`, `from`, `to`, `doctor_id`)
VALUES
    (3, '2012-09-06 16:00:00', '2012-09-06 16:59:59', 1),
    (4, '2012-09-06 17:00:00', '2012-09-06 17:59:59', 1),
    (5, '2012-09-06 14:00:00', '2012-09-06 14:59:59', 2),
    (8, '2012-09-06 17:00:00', '2012-09-06 17:59:59', 2);

【问题讨论】:

  • “终端”是什么意思?你可以解释吗?另外,您问了很多问题,但没有接受任何答案。要接受答案,请单击绿色复选框。
  • 约会 ID 是否总是它链接到的日程表行的 ID?
  • Id不一样,我只是把粘贴记录从一个表复制到另一个。

标签: mysql


【解决方案1】:

如果保证约会 id 与日程表 id 相等,则:

select `id`,`from`,`to`,`doctor_id`
from schedule
where `id` not in 
(select `id` from appointments)
order by `doctor_id`,`from` 

Sqlfiddle

如果不能保证约会 id 被链接,那么:

select `id`,`from`,`to`,`doctor_id`
from schedule
where `id` not in 
(select `t1`.`id` 
from(
select `s`.`id`,`s`.`from`,`s`.`to`,`s`.`doctor_id` 
from schedule as s 
inner join 
appointments as a
on `s`.`doctor_id`=`a`.`doctor_id`
and `s`.`from`=`a`.`from`
and `s`.`to`=`a`.`to`)
as t1)

Sqlfiddle

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2013-06-03
    相关资源
    最近更新 更多