「売れ残り商品」のストアドプロシージャに取り組んでいます。
私がこれまでに取ったアプローチの概要は次のとおりです。
注: 生産では最大 7 つの製品があり、販売テーブルには約 18,000 があり、現在の規模と比較してゆっくりと成長しています。
私の質問は次のとおりです。爆発するクロス結合の潜在的なピットフォールを回避するために検討できる別のアプローチはありますか?
declare @products table (
productName varchar(50)
)
declare @customers table (
customerName varchar(50)
)
declare @sales table (
customerName varchar(50),
productName varchar(50)
)
insert into @products values ('Product1'), ('Product2')
insert into @customers values ('Customer1'), ('Customer2')
insert into @sales values
('Customer1', 'Product1')
,('Customer1', 'Product2')
,('Customer2', 'Product1')
-- want a row for each customer and each product they
-- have not been sold
select *
from @customers C
cross join @products P
where not exists(select productName
from @sales S
where S.customerName = C.customerName and
S.productName = P.productName)