查询符合多个标准的记录

时间:2015-12-02 15:34:01

标签: sql sql-server sql-server-2008 tsql

嗨,我正在尝试编写一个查询,我正在努力弄清楚如何去做。
我有供应商表和供应商零件表我想写一个查询,列出供应商零件表中指定相关零件的供应商。如果供应商没有所有指定的相关零件,则不应列出它们。 目前,我已经编写了一个非常基本的查询,列出了供应商是否有符合标准的相关供应商部件。

SELECT id ,name 
FROM 
efacdb.dbo.suppliers INNER JOIN [efacdb].[dbo].[spmatrix] ON 
id = spmsupp 
WHERE spmpart 
IN ('ALUM_5083', 'ALUM_6082')

我只想向供应商展示他们是否有两个相关的部分。有谁知道我怎么做到这一点?

2 个答案:

答案 0 :(得分:0)

使用子查询计算不同的出现次数:

select * from suppliers s
where 2 = (select count(distinct spmpart) from spmatrix 
           where id = spmsupp and spmpart in ('ALUM_5083', 'ALUM_6082'))

答案 1 :(得分:0)

作为一个注释,您可以修改查询以获得所需内容,只需使用聚合:

SELECT id, name 
FROM efacdb.dbo.suppliers INNER JOIN
     [efacdb].[dbo].[spmatrix] 
     ON id = spmsupp 
WHERE spmpart IN ('ALUM_5083', 'ALUM_6082')
GROUP BY id, name
HAVING MIN(spmpart) <> MAX(spmpart);

如果您知道没有重复项,那么having count(*) = 2也可以解决问题。