2012-09-06 23 views
0

我有兩個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); 
+0

「終止」是什麼意思?你可以解釋嗎?此外,您提出了很多問題,並未接受任何答案。要接受答案,請點擊綠色複選框。 –

+0

預約ID是否始終是它鏈接到的計劃行的ID? – mrmryb

+0

ID不一樣,我只將粘貼記錄從一個表複製到另一個表。 – kkatusic

回答

3

如果它保證了約會的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

+0

謝謝@mrmryb這個工程。 – kkatusic