2013-03-02 21 views
0

我寫的應用程序是爲獲得租給客戶遙測單位,我想查詢記錄的數據爲特定客戶,沒有一個customer_id_fk列在Log表中。獲取數據

我有以下表格:

Customer表:

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

這將是更有效地包括在日誌表中的客戶。但是,如果沒有這一點,你可以得到你想要的東西了一堆的加入:

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表的日期確實日期(無時間),以及日誌記錄有日期時間,那麼你可能需要做更多的日期算術才能使連接正常工作。例如,對於給定的日誌記錄,您可能需要說「開始」確實是在中午之後,而「結束」確實是在中午之前。

+0

我預測,每年有大約在日誌表3個百萬行,你覺得上面的查詢將是一個壞主意?性能影響可能與RentOut表中的行數有關。 – Flo 2013-03-03 10:10:58

+0

@Flo。 。 。這是相當數量的數據。確保在'RentOut(unit_id_fk,start_date,end_date)'和所有表上的主鍵上設置了索引。這應該有助於表現。 – 2013-03-03 16:57:03