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
这不起作用。我不习惯使用子集,这可能是实现所需表的方式。谢谢。
答案 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
之类的东西。