2017-05-29 11 views
0

私は顧客IDと異なるテーブルを持っています。SAP HANA:得意先履歴

書籍表は、顧客ID、bookNrおよび購入日から構成されます。

シューズテーブルは、custoemr id、shoeNr、購入日から構成されています。

私たちはすべてのアイテムのためにテーブルを持っています。

お客様が商品(x)を購入した場合、bookNr someNumberの書籍を言うことができます。すべてのお客様にbookNr someNumberの購入日より前に、すべてのテーブルのすべての注文を取得したいと考えています。

クエリを設計する方法と、データを表現する最適な方法を教えてください。

答えて

1

テーブルのデザイン方法は、購入したアイテムのタイプと購入自体の2つのコンセプトが混在しています。これは今あなたが直面している困難につながります。 代替案は、「アイテム」テーブルにリンクするPURCHASESテーブルを持つことです。 「アイテム」テーブルでは、アイテムの違いによって、アイテムタイプに固有の詳細テーブルへのリンクが表示されます。

これは次のようになりますDB設計することができます:あなたは、現在のデザインを維持したい場合は、ここではおそらく最も簡単な方法は、(労働組合)を組み合わせたビューを作成することです別の項目

[PURCHASES] -- [ITEMS] -- [BOOK_ITEM_DETAILS] 
        | 
        +-------[SHOE_ITEM_DETAILS] 

テーブル。 など。

CREATE view CUSTOMER_PURCHASES as 
SELECT customer_id, shoe_Nr as item_nr, date_of_purchase FROM shoes 
UNION ALL 
SELECT customer_id, book_Nr as item_nr, date_of_purchase FROM books 
... 

こうして、すべての購入は1つのビューで利用できます。

ユーザーが購入したすべてのアイテムを特定のアイテム(シューズなど)で購入する前に、そのアイテムを検索すると、結合クエリを使用できます。

SELECT customer_id, item_nr, date_of_purchase 
FROM customer_purchases cp 
left outer join 
    (SELECT customer_id, item_nr, date_of_purchase 
     FROM customer_purchases 
     where item_nr = <shoe_item_nr> 
     and date_of_purchase = <date_of_purchase> 
     and customer_id = <customer_id>) as ref_purchase 
on 
    cp.customer_id = ref_purchase.customer_id 
and cp.date_of_purchase < ref_purchase.date_of_purchase;