【发布时间】:2015-07-21 08:34:28
【问题描述】:
我有一个 INSERT SQL 查询,它需要检查该条目是否会导致重复预订,并且 2 个用户(医生和患者)也隶属于同一个诊所。 (发现关于场景更容易解释),我的 SQL 是:
WITH ins (MedStaffID, PatientID, TimeSlot, AppDate)
AS (SELECT 1, 6, 10, DATEADD(day, 1, CAST(GETDATE() AS DATE)))
INSERT INTO Appointments (MedStaffID, PatientID, TimeSlot, AppDate)
SELECT ins.MedStaffID, ins.PatientID, ins.TimeSlot, ins.AppDate
FROM ins
WHERE
NOT EXISTS
(
SELECT *
FROM Appointments
WHERE (MedStaffID = ins.MedStaffID OR PatientID = ins.PatientID)
AND TimeSlot = TimeSlot
AND AppDate = ins.AppDate
)
AND
(
SELECT Clinic
FROM Users UD
WHERE UD.ID = ins.MedStaffID
)
=
(
SELECT Clinic
FROM Users UD
WHERE UD.ID = ins.PatientID
);
两个 WHERE 检查在没有另一个的情况下正常运行,但是当它们一起时,即使它应该通过两个检查,也总是导致 INSERT 无法继续。
示例用户表:
ID Clinic Role Forename n'otherstuff
1 1 Doctor Bob Potato
2 1 Patient Jim Cake
3 1 Patient Laura Tart
4 2 Doctor Sally Muffin
5 2 Patient Khaaan Lolly
示例预约表:
ID MedStaffID PatientID TimeSlot Date
1 1 2 1 *today
2 1 2 2 *today
3 1 3 4 *today
4 4 5 2 *today
因此,如果医生已经预约了那个时间和日期,那么插入需要防止他再次预约,对于患者也是如此。
还需要确保医生和患者在同一个诊所。
单独检查完成他们的工作,但我需要它们一起工作,还需要另一次检查以确保放置在“MedStaffID”字段中的 ID 与具有“角色”“医生”的用户相关联,但是现在我被这两张支票难住了。
【问题讨论】:
标签: sql sql-server-2008 where not-exists