我想从表中提取可用的时间,其中预订的时间存储在另一个表中

时间:2013-08-21 14:03:46

标签: sql

我的要求是我需要知道一张桌子上的剩余预约时间,其中的选项可以在另一张桌子上找到。 选项可在此表中找到

此表中提供了选项

Timeid  Timing
==========================
1   | 00:00.0
----------------------------
2   | 00:00.0
-------------------------
3   | 00:00.0
--------------------------
4   | 30:00.0
------------------------------
5   | 30:00.0
-------------------------
6   | 30:00.0
-----------------------
7   | 30:00.0
------------------------
8   | 30:00.0
-------------------------

预订保存在下表中

预订保存在下表中

TreaterID   DateBooked  TimeID
----------------------------------------
1   |2012-01-01 |8
----------------------------------
1   |2012-01-01 |3
-------------------------------------

我希望结果是来自时间表的时间,而不是在特定日期的预订表中。 我是编程新手,只能解决这个问题

SELECT Timing FROM ClinicNew.tbl_timing
    WHERE Timeid <>(SELECT Timeid FROM ClinicNew.TreaterEngagedDTM WHERE DateBooked = '02-01-2012')

这个查询没有给我一个正确的解决方案 - 这意味着当表2中没有日期时它会返回空白。如果日期至少可用一次,它可以正常工作。 请帮助解决此问题,或为我的要求提供不同的适当解决方案。

2 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTS

SELECT timing 
FROM   clinicnew.tbl_timing T 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   clinicnew.treaterengageddtm B 
                   WHERE  B.datebooked = '02-01-2012' 
                          AND T.timeid = B.timeid) 

Demo

结果是:

TIMING
00:00.0
00:00.0
30:00.0
30:00.0
30:00.0
30:00.0

排除了两个记录(请注意,我已将演示中的日期更改为表格中的日期,以证明NOT EXISTS有效,并且您的日期仍将返回所有记录。

答案 1 :(得分:0)

SELECT Timing
FROM ClinicNew.tbl_timing t1
WHERE NOT EXISTS(SELECT 1 FROM ClinicNew.TreaterEngagedDTM t2
                 WHERE t2.TimeId = t1.TimeId
                 AND t2.DateBooked = '2012-01-02')