我正在编写的应用程序是针对租用给客户的遥测单元,我正在尝试查询特定客户的记录数据,而customer_id_fk
表中没有Log
列。< / p>
我有以下表格:
客户表:
id | name | ...
单位表:
id | name | ...
RentOut表:
id | start_date | end_date | unit_id_fk | customer_id_fk
日志表:
id | unit_id_fk | datetime | data1 | data2
customer_id_fk
表中未包含Log
列的原因是,RentOut表中的错误很容易纠正,无需更改Log
表中的数据(虽然也许有更好的方法可以做到这一点?)。
答案 0 :(得分:0)
将客户包含在日志表中会更有效。但是,如果没有它,你可以用一堆连接得到你想要的东西:
select l.*, c.*
from log l left outer join
RentOut ro
on l.unit_id_fk = ro.unit_id_rk and
l.datetime between ro.start_date and ro.end_date left outer join
Customer c
on ro.customer_id = c.id
where c.<whatever> = <foobar>
如果RentOut表中的日期确实是日期(没有时间),并且日志记录具有日期时间,那么您可能需要执行更多日期算术才能使联接正常工作。例如,您可能需要说“开始”实际上是在中午之后,“结束”实际上是在正午之前,对于给定的日志记录。