如何使用count运算符获取表的子集

时间:2019-03-04 00:34:32

标签: sql sql-server-2012

SQL Server 2012。

每个企业都有一个或多个团队。每个团队可以有赞助商,也不能有任何赞助商。

Enterprise

Id    Name
1      A
2      B
3      C

和团队表:

Team

Id    Name    EnterpiseId
1      For         1
2      Xor         2
3      Nor         2
4      Xur         1
5      Fir         3
6      Fte         2

现在是桌子赞助商

Sponsor

id     Name    TeamId
1      XX1        1
2      FC7        1
3      89U        3

现在,我需要知道如何显示此表,该表仅显示至少拥有一个赞助商的企业。

FINAL TABLE

Id    Name
1      A
3      C

企业B有3个团队,但是这3个团队没有赞助商,因此我想显示赞助商为“ A”和“ C”的企业。

Select A.id, A.name
FROM Enterprise A
LEFT JOIN Team B on A.Id=b.EnterpriseId
INNER JOIN Sponsor C on B.Id=C.TeamId
Where (SELECT COUNT(*) FROM Sponsor S INNER JOIN Team T on T.id=S.TeamId group by T.id)>0

这不起作用。我不习惯使用子集,这可能是实现所需表的方式。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用JOIN来执行此操作。 GROUP BY只是为了消除重复:

SELECT e.id, e.name
FROM Enterprise e JOIN
     Team t
     ON e.Id = t.EnterpriseId JOIN
     Sponsor s
     ON t.Id = s.TeamId
GROUP BY e.id, e.name;

JOIN仅匹配具有赞助商的团队。

如果您要查找多个对象,则需要使用HAVING COUNT(*) > 1之类的东西。