m_techno_idea (アイデアを保存)、m_techno_idea_moderator_vote (モデレーターの投票)、m_techno_idea_user_vote (ユーザーの投票用) というテーブルがあります。モデレーターの投票が 1 から 5 の間であるのに対し、ユーザーの投票は 1 のみであり、votes という名前の列に保存されます。だから私は合計番号を取得する必要があります。1 回のクエリでの投票数。ネストされたクエリは必要ありません。
私の試み:
試行 1:
SELECT
COUNT(DISTINCT TIUV.PK_ID) + IFNULL((SUM(TIMV.VOTES)),0) AS VOTES
FROM
M_TECHNO_IDEA TI
LEFT OUTER JOIN
M_TECHNO_IDEA_MODERATOR_VOTE TIMV
ON
TIMV.FK_TECHNO_IDEA_ID=TI.PK_ID
LEFT OUTER JOIN
M_TECHNO_IDEA_USER_VOTE TIUV
ON
TIUV.FK_TECHNO_IDEA_ID=TI.PK_ID
WHERE
TI.PK_ID=2
ここで、distinct キーワードを使用すると、ユーザーの投票に対して個別の行を作成できますが、モデレーターの投票に対しては、投票が多くの行で同じになる可能性があるため、distinct を使用できません。これにより、間違った結果が得られます。
試行 2:
SELECT (select count(TIUV.PK_ID) FROM M_TECHNO_IDEA_USER_VOTE TIUV
WHERE TIUV.FK_TECHNO_IDEA_ID=2) +
(select sum(TIMV.VOTES) FROM M_TECHNO_IDEA_moderator_VOTE TIMV
WHERE TIMV.FK_TECHNO_IDEA_ID=2) AS VOTES
試行 2 では正しい結果が得られますが、クエリは見栄えがよくありません。group by も試しましたが、役に立ちませんでした。どんな助けでも大歓迎です。
試行 3:
SELECT
COUNT(DISTINCT TIUV.PK_ID) + IFNULL(MODVOTES.VOTES, 0) AS VOTES
FROM
(SELECT
TIMV.FK_TECHNO_IDEA_ID, SUM(TIMV.VOTES) VOTES
FROM
M_TECHNO_IDEA_MODERATOR_VOTE TIMV
GROUP BY TIMV.FK_TECHNO_IDEA_ID) MODVOTES
LEFT OUTER JOIN
M_TECHNO_IDEA_USER_VOTE TIUV ON TIUV.FK_TECHNO_IDEA_ID = MODVOTES.FK_TECHNO_IDEA_ID
WHERE
TIUV.FK_TECHNO_IDEA_ID = 2
この試みも正しい結果をもたらします。ネストされたサブクエリを配置する必要がありました。より良い解決策があれば、それはありがたいです。