📅  最后修改于: 2023-12-03 15:38:26.763000             🧑  作者: Mango
在 SQL Server 中,我们经常需要进行数据筛选和匹配操作。有时需要选择匹配某个列表中所有项目的行组。本篇文章将介绍如何使用 SQL Server 实现该操作。
DECLARE @MatchList table (
MatchValue varchar(50)
);
INSERT INTO @MatchList (MatchValue)
VALUES
('AAA'),
('BBB'),
('CCC');
SELECT t.ID, t.Name, t.Value
FROM [TableName] t
INNER JOIN @MatchList m
ON t.Value = m.MatchValue
GROUP BY t.ID, t.Name, t.Value
HAVING COUNT(*) = (SELECT COUNT(*) FROM @MatchList);
在上面的代码中,我们用 INNER JOIN 把 [TableName]
表(假设为需要筛选的表)与 @MatchList
表进行了连接,并根据 Value
字段进行匹配。然后使用 GROUP BY 对结果进行分组,这里我们需要得出所有匹配列表中项目的总数,所以在 HAVING 字句中使用 COUNT(*) 函数计算了记录数,并且与 @MatchList
表的记录数进行了比较。
该查询会返回匹配列表中所有项目的行组。如果列表中有 3 个项目,那么只有在某个组的 Value
字段值同时等于这三个项目时,该组才会被返回。
在 SQL Server 中,使用 INNER JOIN 和 GROUP BY 可以轻松地实现选择匹配列表中所有项目的行组。希望本篇文章能对你有所帮助。