テーブルのデザイン方法は、購入したアイテムのタイプと購入自体の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;
書籍を購入する前に購入したアイテムを取得するにはどうすればよいですか? – Sai
私は以前の購入を見つけるための例を使って答えを広げました。 –
'cp.date_of_purchase
Sai