0

私が書いているアプリは、顧客に貸し出されるテレメトリユニット用customer_id_fkであり、テーブルに列がない状態で、特定の顧客のログデータをクエリしようとしていLogます。

私は次のテーブルを持っています:

顧客テーブル:

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(ただし、これを行うためのより良い方法はありますか?)。

4

1 に答える 1

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 テーブルの日付が実際には日付 (時刻なし) であり、ログ レコードに日時が含まれている場合、結合が適切に機能するには、さらに日付計算を行う必要がある場合があります。たとえば、特定のログ レコードについて、「開始」が実際には正午後であり、「終了」が実際には正午前であると言う必要がある場合があります。

于 2013-03-02T20:35:59.533 に答える