私は mySQL を初めて使用し、製品の価格がスキャンされたすべての店舗とスキャンされていない店舗を一覧表示するクエリを作成するのに苦労しています。以下は、単一の製品の正しい結果を示します。
select distinct(s.id) as store_id, s.chainID as chain_id, p1.productID as product_id,
s.chain, s.location, s.city, prd.brand, prd.product, prd.quantity, prd.size, prd.unit
from analytics.price p1 -- Fact table with prices
join analytics.pricetime pt -- Dimension table with time a price was scanned
on p1.priceTimeID = pt.id
join analytics.product prd -- Dimension table with products
on p1.productID = prd.id
and prd.published = 1
right join analytics.store s -- Dimension table with stores and the chain they belong to
on p1.storeID = s.id
and p1.chainID = s.chainID
and p1.productID = 46720
and p1.priceTimeID between 2252 and 2265
where s.published=1
and s.chainID = 5;
p1.productID = 46720句を削除してすべての製品の結果を取得すると、価格をスキャンしたすべての店舗 (正しい) が取得されますが、右側の結合の価格なし側には、価格がスキャンされていない店舗のみが表示されます。任意の製品。(これは、価格の事実と、製品、時間、店舗の次元を持つ単純なスター スキーマです)。助けていただければ幸いです。「in」、「not exists」、およびカーソルを使用したストアド プロシージャなど、考えられるあらゆる方法でこれを試しましたが、どの方法でもレンガの壁にぶつかるようです。
明確にするために編集:
これが私が達成しようとしていることです:
Price table
Product Chain Store Price
100 5 1 $10
101 5 2 $20
Store table
Chain Store
5 1
5 2
5 3
Desired Result
Product Chain Store Price
100 5 1 $10
100 5 2 NULL
100 5 3 NULL
101 5 1 NULL
101 5 2 $20
101 5 3 NULL
Actual Result
Product Chain Store Price
100 5 1 $10
101 5 2 $20
NULL 5 3 NULL