使用count执行多表内/左/右连接(或相关子查询)?

时间:2011-09-13 21:57:55

标签: mysql sql database join business-logic

我想知道如何使用以下结构精确地执行3向连接(非常简化)

**Table 1:**
vote.id
vote.item_id

**Table 2:**
item.id
item.owner_id

**Table 3**
owner.id

我的目标基本上是计算一个'所有者'具有。我一直在想我可以使用相关的子查询来做到这一点,但如果投票很大,那么这似乎是一次表现难?也许我错了?我无法绕过这样的3(或更多)桌子。是否可以在1个查询而不是2个步骤中执行此操作?

即:

SELECT owner.id, 
   (SELECT count(SELECT count(vote.id) as Cnt WHERE vote.item_id = item.id) as ItemCnt
   WHERE item.owner_id = owner.id) as TotalCnt 
WHERE owner.id = :id

这样的事情会起作用吗?是否有更好,更有效的方法来做到这一点?

任何帮助或建议都非常感谢

1 个答案:

答案 0 :(得分:3)

就这么简单:

select count(vote.id)
from owner
left join item on (item.owner_id = owner.id)
left join vote on (vote.item_id = item.id)
where owner.id = :id