我正在使用 C# 和 postgreSQL 数据库构建一个 asp.net 应用程序。该应用程序是医生办公室的预约系统。
我有下表用于预约:
我有下表的时间:
两个表中的列时间之间存在关系(tbl_appointment 中的时间是 tbl_times 中时间的外键)。
在应用程序中,我有一个如下所示的下拉列表。用户首先选择医生,然后选择日期,然后点击下拉列表选择时间。带有时间的下拉列表是从数据库 tbl_times 加载的。
现在我的问题是: 如何编写 SQL 以仅加载没有约会的时间? 如果用户首先选择 Dr D,然后选择日期 2014-04-23,那么在下拉列表中我想加载从 tbl_times 开始的所有时间,除了 08:00 和 10:00。
更新: 我的问题是如何排除记录。 我试过这个SQL(当然我不写值):
SELECT time
FROM tbl_times
WHERE time NOT IN (
SELECT time
FROM tbl_appointment
Where doctor = 'Dr D' AND date = '2014-04-23'
)
最佳答案
因为您没有 Doctors 治疗台,您正在让自己的生活变得艰难。我还会有一个 DateTime 列,而不是 Date 和 Time。我的建议是:
select t.DateTime, d.Name from times t
cross join doctors d
left join Appointments a on t.DateTime = a.DateTime and d.DoctorID = a.DoctorID
where a.ID is null
这将为您提供所有医生免费预约的列表。
正如我在评论中提到的,您需要阅读 SQL Injection Attacks .就目前而言,您的代码非常脆弱。
关于c# - 预订系统中的SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23239537/