2012-04-25 13 views
1

私は、私が使用して3つのテーブル間の結合から得られる結果セットを持って参加しますペアはPKです。MySQLのコンプレックスは、最適化

最初のクエリによって返された各X.idは、Dテーブルに複数のエントリを持つ可能性があります。

SELECT SUM(vote) FROM D WHERE `id`=%d 

私は現在のスキームの結果として単一のクエリにこれらの2つのクエリを最適化することができれば、私は疑問に思って:通常、各返された行について、idあたりの票をカウントするためには、私のようなクエリを記述します。 O(n)実行時間。 nは、最初のクエリによって返された結果の数です。

答えて

3

あなたは、単にこの

SELECT 
X.*, 
Y.Name, 
(SELECT 
    SUM(vote) 
    FROM D 
    WHERE `id` = X.id) as Count 
FROM `A` AS X 
INNER JOIN `B` AS Y 
INNER JOIN `C` AS Z 
ON X.id = Y.id 
    AND X.categoryID = Z.categoryID 
WHERE X.userID_FK = % d 
AND X.listID_FK = % d 
ORDER BY Z.categoryRank ASC 
ようにそれを行うことができます