MYSQL:现在空置/占用的房间

时间:2014-12-29 09:18:07

标签: mysql sql mysqli

我有三个表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仍然被占用,不应该显示在查询结果中。

1 个答案:

答案 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 ;