1

このようなメッセージをもう 1 つ投稿しました。しかし、誰も助けませんでした。だから私はもう少し読んで、ある程度機能するこのコードを持っています:

新しいバージョンと新しい問題を編集

SELECT i.*, o.organ_name, o.organ_logo, vtable.*
FROM heroku_056eb661631f253.op_ideas i
JOIN
(SELECT
    COUNT(v.agree) as agree,
    COUNT(v.disagree = 1 or null) as disagree,
    COUNT(v.obstain = 1 or null) as abstain
FROM op_idea_vote v
) AS vtable
LEFT JOIN op_organs o ON i.post_type = o.organs_id

op_idea_vote テーブルには 1 行しかなく、op_ideas テーブルには 3 行あります。しかし、各行に各 op_ideas 行の合計を与えています

作業ソリューションの編集

WayneC のおかげで、ここに作業コードがあります。

SELECT i.*, o.organ_name, o.organ_logo, vtable.*
FROM heroku_056eb661631f253.op_ideas i
JOIN
   (SELECT v.idea_Id,
    COUNT(v.agree = 1 or null) as agree,
    COUNT(v.disagree = 1 or null) as disagree,
    COUNT(v.obstain = 1 or null) as abstain
   FROM op_idea_vote v
   GROUP BY v.idea_id
   ) AS vtable ON vtable.idea_id = i.idea_id
LEFT JOIN op_organs o ON i.post_type = o.organs_id
WHERE idea_geo = 'International';
4

2 に答える 2

2

これを試して

SELECT i.*, o.organ_name, o.organ_logo, vtable.*
FROM heroku_056eb661631f253.op_ideas i
JOIN
    (SELECT
        COUNT(v.agree) as agree,
        COUNT(v.disagree = 1 or null) as disagree,
        COUNT(v.obstain = 1 or null) as abstain
    FROM op_idea_vote v
    GROUP BY v.idea_id
    ) AS vtable ON vtable.idea_id = i.idea_id
LEFT JOIN op_organs o ON i.post_type = o.organs_id

以下の回答には、vtable の group by と join 条件がありませんでした

于 2012-10-14T11:14:12.613 に答える
1

これが元のクエリです

SELECT i.*, o.organ_name, o.organ_logo
FROM heroku_056eb661631f253.op_ideas i
JOIN
    (SELECT
        COUNT(v.agree) as agree,
        COUNT(v.disagree = 1 or null) as disagree,
        COUNT(v.obstain = 1 or null) as abstain
    FROM op_idea_vote v, op_ideas i
    WHERE v.idea_id = i.idea_id
    ) AS vtable
  LEFT JOIN op_organs o ON i.post_type = o.organs_id

vtableは、結合しているテーブルを装ったサブクエリです。クエリ結果とともに返されるフィールドを取得するという点では、通常のテーブルを結合するのと同じです。メインクエリで返すフィールドを選択する必要があります。そうしないと、フィールドは返されません。

SELECT i.*, o.organ_name, o.organ_logo, vtable.*
FROM heroku_056eb661631f253.op_ideas i
JOIN
    (SELECT
        COUNT(v.agree) as agree,
        COUNT(v.disagree = 1 or null) as disagree,
        COUNT(v.obstain = 1 or null) as abstain
    FROM op_idea_vote v, op_ideas i
    WHERE v.idea_id = i.idea_id
    ) AS vtable
  LEFT JOIN op_organs o ON i.post_type = o.organs_id
于 2012-10-13T16:03:56.390 に答える