1

次を使用して、3 つのテーブル間の結合から取得した結果セットがあります。

SELECT X.*, Y.Name 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

次を含む4番目のテーブル「D」があります。

-------------------------------
  id_FK    userID_FK    vote
-------------------------------

ここで(id_FK, userID_FK)ペアは PK です。

最初のクエリによって返されたそれぞれX.idのテーブルには、複数のエントリが含まれている可能性がありDます。通常、返された行ごとに、投票数をカウントするために、次idのようなクエリを記述します。

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

O(n)現在のスキームでは実行時間がかかるため、これら 2 つのクエリを 1 つのクエリに最適化できるかどうか疑問に思っています。n最初のクエリによって返される結果の数です。

4

1 に答える 1

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
于 2012-04-25T06:33:52.860 に答える