2011-09-13 1 views
1

私は正確にどのように3ウェイは、次の構造を使用して結合を実行する方法(単純化されたくらい)複数テーブル内/左/右ジョイン(または相関サブクエリ)をcountで実行していますか?ここ

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

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

**Table 3** 
owner.id 

を思ったんだけど私の目標は、「所有者」は持っている投票数をカウントすることは非常に基本的です。私は相関サブクエリを使ってこれを単純に行うことができると思っていますが、投票が巨大であればパフォーマンスが向上するようです。たぶん私は間違っています?私はちょうどこのような3(またはそれ以上の)テーブルの周りに私の頭を得ることができません。 2つのステップではなく1つのクエリでこれを行うことは可能ですか?

すなわち:

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 

このような何かをしても動作しますか?これを行うためのより良い、より効率的な方法がありますか?

すべてのヘルプやアドバイスが非常にと常に

答えて

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 
+0

それですか?ハァッ。私はそれがはるかに簡単だろうと思った。 –

関連する問題