查询:如何针对所需的项目列表查找错误的组件

时间:2014-09-13 02:30:22

标签: sql sql-server

我尝试在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条记录。

提前感谢您的帮助。

1 个答案:

答案 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
                     );