我尝试在MS SQL 2008中创建一个查询,将项目及其组件列表与配对项目必需组件列表进行比较,以确保没有项目包含它不应该包含的组件。我正在寻找一个优雅的解决方案。
我的表格如下:
必需的组件:
Rayon Shirt - Blue Fabric - Bone Buttons.
Cotton Shirt - Red Fabric - Plastic buttons
数据:
Model-Component
DKNY-Rayon
DKNY-Blue
DKNY-Bone
Nike-Cotton
Nike-Red
Nike-Bone
所以我的任务是找出任何具有[人造丝和(不是蓝色织物或非骨质按钮)]或[棉和(不是红色织物或非塑料纽扣)]的模型。这非常简单,因为我的数据表长达37,000条记录。
提前感谢您的帮助。
答案 0 :(得分:0)
因此,您需要组件与任何模式都不匹配的模型。以下列出了所有模型和匹配要求的列表,以及匹配的数字:
select d.model, r.requiredid, count(distinct d.component) as nummatches
from data d left join
required r
on d.component = r.component1 or
d.component = r.component2 or
d.component = r.component3
group by d.model, r.requiredid;
您想要的是没有3场比赛的型号数量。我们使用not in
:
select distinct d.model
from data d
where d.model not in (select d.model
from data d left join
required r
on d.component = r.component1 or
d.component = r.component2 or
d.component = r.component3
group by d.model, r.requiredid
having count(distinct d.component) = 3
);