假设我有两张table: Tenants
以及 Wargles
. Wargles
有外键指向 Tenants
打电话 TenantId
. 如果我想得到每个租户的wargle数量,我可以这样做:
SELECT t.Id as TenantId, count(w.Id) as WargleCount
FROM Tenants t
JOIN Wargles w ON w.TenantId = t.Id
GROUP BY t.Id
现在,假设我还有一张table, Fiddles
,作为 Wargles
有一个fk指向 Tenants
. 如何向上面的查询中添加另一列,以便获得每个租户的wargle数和fiddle数?
我试过这个:
SELECT t.Id as TenantId, count(w.Id) as WargleCount, count(f.Id) as FiddleCount
FROM Tenants t
JOIN Wargles w ON w.TenantId = t.Id
JOIN Fiddles f ON f.TenantId = t.Id
GROUP BY t.Id
但这行不通,因为它将为warglecount和fiddlecount提供相同的数字,这两个表中的行的乘积。
3条答案
按热度按时间j9per5c41#
使用两个子选择
uxh89sit2#
最有效的方法可能是使用相关子查询:
特别是,这可以利用上的索引
Wargles(TenantId)
以及Fiddles(TenantId)
.2uluyalo3#
在您的情况下,作为可扩展的解决方案,我建议使用标量函数。
函数
select语句