首页 > 解决方案 > 如何在列必须匹配所有值的情况下执行 SELECT?

问题描述

考虑一个有 3 列的表:

CREATE TABLE myTable (
ItemName nvarchar(100),
ItemRank int,
ItemLoc nvarchar(100))

表的示例输出(要在下面插入的查询)

SELECT * FROM myTable
  1. 项目 1, 1, LocA
  2. 项目 1、2、LocB
  3. 项目 1、3、LocC
  4. 项目 2, 1, LocA
  5. 项目 2, 2, LocC
  6. 项目 3, 1, LocB
INSERT INTO [dbo].[myTable]
           ([ItemName]
           ,[ItemRank]
           ,[ItemLoc])
     VALUES
           ('Item1',1,'LocA'),
           ('Item1',2,'LocB'),
           ('Item1',3,'LocC'),
           ('Item2',1,'LocA'),
           ('Item2',2,'LocC'),
           ('Item3',1,'LocB')

现在,我知道只有 3 个可能的ItemLoc值(LocA、LocB、LocC)。

我需要选择项目未分配所有ItemNames的所有s(即 LocA、LocB、LocC)。myTableItemLoc

使用 aboce 数据的所需输出是

  1. 项目2
  2. 第 3 项

因为Item2没有LocB设置,Item3也没有LocALocC设置。

我怎样才能做到这一点?我尝试使用NOT EXISTS查询并列出条件,但无济于事。

标签: sqlsql-server-2008-r2

解决方案


使用聚合

select ItemName
from myTable
where ItemLoc in ('LocA','LocB','LocC')
group by ItemName
having count(distinct itemloc)<3

推荐阅读