如何在列必须匹配所有值的地方执行 SELECT?
How to perform SELECT where a column must match ALL values?
考虑具有 3 列的 table:
CREATE TABLE myTable (
ItemName nvarchar(100),
ItemRank int,
ItemLoc nvarchar(100))
table 的示例输出(要在下面插入的查询)
SELECT * FROM myTable
- Item1, 1, LocA
- Item1, 2, LocB
- Item1, 3, LocC
- Item2, 1, LocA
- Item2, 2, LocC
- Item3, 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)。
我需要 select 来自 myTable
的所有 ItemName
,其中项目没有分配所有 ItemLoc
(那些是 LocA、LocB、LocC)。
使用 aboce 数据的期望输出是
- Item2
- Item3
因为 Item2
没有设置 LocB
,并且 Item3
没有设置 LocA
或 LocC
。
我该怎么做?我尝试使用 NOT EXISTS
查询并列出条件,但无济于事。
使用聚合
select ItemName
from myTable
where ItemLoc in ('LocA','LocB','LocC')
group by ItemName
having count(distinct itemloc)<3
考虑具有 3 列的 table:
CREATE TABLE myTable (
ItemName nvarchar(100),
ItemRank int,
ItemLoc nvarchar(100))
table 的示例输出(要在下面插入的查询)
SELECT * FROM myTable
- Item1, 1, LocA
- Item1, 2, LocB
- Item1, 3, LocC
- Item2, 1, LocA
- Item2, 2, LocC
- Item3, 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)。
我需要 select 来自 myTable
的所有 ItemName
,其中项目没有分配所有 ItemLoc
(那些是 LocA、LocB、LocC)。
使用 aboce 数据的期望输出是
- Item2
- Item3
因为 Item2
没有设置 LocB
,并且 Item3
没有设置 LocA
或 LocC
。
我该怎么做?我尝试使用 NOT EXISTS
查询并列出条件,但无济于事。
使用聚合
select ItemName
from myTable
where ItemLoc in ('LocA','LocB','LocC')
group by ItemName
having count(distinct itemloc)<3