如何根据过滤后的 table 过滤 table
How to filter a table against a filtered table
我有一个代码 table 包含运动代码列表。我还有另一个 table 包含可能包含多个运动代码的员工列表。
我只想return代码table中体育代码可以涵盖的员工。
像这样:
在这种情况下,Jason 拥有代码 table 中的每个代码,而 Jackson 是一个代码短(codeID 3)所以只有 Jason 是 return。
Declare @code table
(
codeID varchar(4),
codeDes varchar(72)
Primary Key(codeID, codeDes)
)
Insert into @code
Values ('1', 'apple picking'), ('2', 'pear picking'), ('3', 'farming')
Declare @staff table
(
staffID int,
name varchar(8),
codeID varchar(4)
)
Insert into @staff
Values (1, 'Jason', '1'), (1, 'Jason', '2'),
(1, 'Jason', '3'), (1, 'Jason', '4'),
(2, 'Jackson', '1'), (2, 'Jackson', '2')
您可以尝试以下假设员工拥有唯一代码的示例。
SELECT staffId, Name
FROM @staff s
INNER JOIN @code c ON c.codeID = s.codeID
GROUP BY StaffId, Name
HAVING COUNT(DISTINCT s.CodeId) = (SELECT COUNT(1) FROM @code)
我有一个代码 table 包含运动代码列表。我还有另一个 table 包含可能包含多个运动代码的员工列表。
我只想return代码table中体育代码可以涵盖的员工。
像这样:
在这种情况下,Jason 拥有代码 table 中的每个代码,而 Jackson 是一个代码短(codeID 3)所以只有 Jason 是 return。
Declare @code table
(
codeID varchar(4),
codeDes varchar(72)
Primary Key(codeID, codeDes)
)
Insert into @code
Values ('1', 'apple picking'), ('2', 'pear picking'), ('3', 'farming')
Declare @staff table
(
staffID int,
name varchar(8),
codeID varchar(4)
)
Insert into @staff
Values (1, 'Jason', '1'), (1, 'Jason', '2'),
(1, 'Jason', '3'), (1, 'Jason', '4'),
(2, 'Jackson', '1'), (2, 'Jackson', '2')
您可以尝试以下假设员工拥有唯一代码的示例。
SELECT staffId, Name
FROM @staff s
INNER JOIN @code c ON c.codeID = s.codeID
GROUP BY StaffId, Name
HAVING COUNT(DISTINCT s.CodeId) = (SELECT COUNT(1) FROM @code)