我正在尝试查询患者数据,以便患者出现在特定的每日预约时间表上并显示记录提供者。患者数据存储在VCore_Plan_中,每日约会日志位于约会中。提供程序名称需要链接到provider_mstr表,该表将provider_ID转换为名称。
select p.last_name, vcp.Plan_1_Text + vcp.Plan_2_Text + vcp.Plan_3_Text + vcp.Plan_4_Text from VCore_Plan_ vcp
inner join person p ON p.person_id = vcp.person_id
inner join provider_mstr pm ON pm.provider_id = vcp.Provider_ID
inner join appointments a ON a.person_id = vcp.person_id
where vcp.person_id = (Select person_id from appointments where appt_date = '20151106')
这个查询给了我一个错误,因为我的where子句有多个结果。在其他语言中,我会使用for循环来提取数据。这是如何在SQL Server中完成的?我希望每位患者的所有计划数据都显示在今天的预约列表中。
谢谢!
答案 0 :(得分:1)
由于您已经在约会表上完成了内部联接,因此您无法使用:WHERE a.appt_data = '20151106'
代替where vcp.person_id = (Select person_id from appointments where appt_date = '20151106')
吗?
在SQL中执行相等(=)检查要求右侧参数是单个值,而不是值的集合。使用IN
代替等号也可以,但由于您已经遇到将表连接成一个数据集的麻烦,您也可以使用a.appt_data
并保存你自己额外的查询时间。
答案 1 :(得分:0)
我的内部联接搞砸了 - 将where子句更改为in语句并修复了内部联接以包含正确的字段。