我有三个表room_charges,room_category和patient_detail
room_category
id room_category
1 twin
2 classic
3 Deluxe
room_charges
id room_name room_category
1 tw1 1
2 tw2 1
3 cl1 2
4 cl2 2
5 dl1 3
patient_detail
id patient_name room_name room_category admission_date_time discharge_date_time discharged
1 Mr x 1 1 10-12-14 10:40 12-12-14 08:40 1
2 Mr y 1 1 12-12-14 11:40 15-12-14 13:10 1
3 mr z 1 1 15-12-14 14:40 null null
我正在使用查询来查找vacant_beds详细信息,但是根据patient_detail表,room_id 1被占用,但是我将它空置。 我正在使用的查询是这样的:
select `rc`.`id` AS `id`,
`rct`.`room_category` AS `room_category`,
group_concat(`rc`.`room_name` separator ',') AS `vacant_beds`
from ((`room_charges` `rc`
left join `patient_detail` `pd` on((`rc`.`id` = `pd`.`room_name`)))
join `room_category` `rct` on((`rc`.`room_category` = `rct`.`id`)))
where ((`pd`.`discharged` = 1) or isnull(`pd`.`admission_date_time`))
group by `rc`.`room_category`
having max(admission_date_time)
我正在创建一个视图来获取空床信息而不能使用子查询。 非常感谢您提供合适的解决方案。
好的,我的结果如下所示:
room_category room_name
twin tw2
classic cl1,cl2
deluxe dl1
这意味着根据患者详细信息表格,房间tw1仍然被占用,不应该显示在查询结果中。
答案 0 :(得分:1)
您的问题很难理解,因为查询中的列与示例数据中的列不匹配。此外,你没有想要的结果。
我认为您需要将日期比较移到on
子句中,然后在where
中查找不匹配项:
select rct.room_category AS room_category,
group_concat(rc.room_name separator ',') AS vacant_beds
from room_charges rc join
room_category rct
on rc.room_category = rct.id left join
patient_detail pd
on rc.id = pd.room_name and
(pd. discharge_date_time is null or
curdate() between admission_date_time and discharge_date_time)
where pd.id is null
group by rc.room_category ;