我对SQL很陌生,我希望这是一个可以理解的问题。我正在为自己做一个小项目,我从问题到问题尝试学习新事物。我已经创建了一个Access文件,我用c#更新了SQL。
在将医生从数据库中删除之前,我想将其现有的预约重新安排给在原始预约日期有时间的其他医生。
我的APPOINTMENT表中包含以下列: ID_Appointments,ID_Doctor,ID_Patient,日期,时间和专栏说明。
对于ID_Patient值,我将使用表ID_Patient,反之亦然使用Doctor值。
我一直在考虑更新ID_Doctor的值,而另一位医生没有在给定的数据和时间预约,但是创建代码从头开始对我来说很难并且有一些帮助我希望了解它早得多。
非常感谢任何帮助,谢谢!
答案 0 :(得分:4)
假设这是所有理论(在高容量数据库中更好的方法!)。 但是为了学习SQL,以下应该可以解决问题。
UPDATE a
SET ID_Doctor = (SELECT TOP 1 ID_Doctor FROM ID_Doctor d
WHERE NOT EXISTS (SELECT 1 FROM Appointment da
WHERE da.ID_Doctor = d.ID_Doctor
AND da.Date = a.Date AND da.Time = a.Time)
)
FROM Appointment a
WHERE a.ID_Doctor = <The ID of the Doctor who Died>
Explination: 它更新您的约会表(别名:a),其中约会是死亡医生的ID。 它为那些约会确定了医生的身份,成为当时没有预约的医生的第一个身份。
注意:您可以通过更改行来改进sql:da.Time = a.Time 更多的是一个时间范围,所以你没有预定非常接近的约会。
答案 1 :(得分:3)
因为这涉及到医疗数据库,当涉及到访问它的代码时,它具有相当强的HIPAA法规来管理它,你可能希望将其留给开发人员。也没有现有代码的scintilla,你不能发布任何因为它属于医疗数据库,我们没有帮助你的起点。
答案 2 :(得分:3)
要取代所有约会的医生42,请尝试:
update Appointments
set ID_Doctor =
(
select top 1 ID_Doctor
from Doctors d
where d.Alive = 1
and not exists
(
select *
from Appointments a
where d.ID_Doctor = a.ID_Doctor
and Appointments.Time = a.Time
)
)
where ID_Doctor = 42
and PatientSignedImmunityFormForInjuriesCausedByUntestedSQL = 1
(免责声明:不要将SO代码用于医疗生产软件,哈哈)
答案 3 :(得分:1)
你说Access,但是你使用Jet还是安装了Access本身?如果是,您可以使用查询设计窗口设置示例查询,然后切换到SQL视图以查看它们的工作方式。来自它的SQL字符串应该可以在c#中使用,只需要很少的修改。我希望有类似的东西:
UPDATE Appointments SET ID_Doctor = 2
WHERE ID_Doctor = 1