2012-02-15 16 views
0

私は統計を作成したいオンライン調査システムを構築しています。私はユーザーの性別に基づいてクエリをしたい。それは質問に対する答えがないヌル応答を思い出させるように私は次のクエリを構築した SQL複数のテーブルにまたがって結合する

  • survey_question_options
  • survey_answer
  • ユーザー:私は、次のテーブルがあります。

    SELECT COUNT(sa.option_id) AS answer , so.option_label 
    FROM survey_answer sa 
    RIGHT JOIN survey_question_options so 
         ON sa.option_id = so.option_id AND 
          sa.record_date>='2011-09-01' AND 
          sa.record_date<='2012-08-01' 
    LEFT JOIN users u 
         ON (sa.uid = u.uid AND u.gender='F') 
    WHERE so.question_id=24 
    GROUP BY so.option_label 
    ORDER BY so.option_id ASC 
    

    私のクエリは次の結果セットを返します:

    0 Red 
    1 Yellow 
    0 Blue 
    0 Green 
    

    ただし、LEFT JOINの性別条件はクエリでは無視されているように見えます。ジェンダーを 'M'に変更すると、同じ結果が返されます。ただし、期待される結果はすべて0となります。

    どこが間違っているのかわかりません。助けてください。

    ありがとうございます。

答えて

0
左がusersテーブルに参加

は、回答テーブルに参加 after を評価し - ユーザーが間違った性別、返されるアンサーは、(関係なく、のであれば、ユーザーのレコードが返されていないがためユーザーの性別)。試してみてください:

SELECT COUNT(sa.option_id) AS answer , so.option_label 
FROM (select a.option_id 
     from survey_answer a 
     JOIN users u ON a.uid = u.uid AND u.gender='F' 
     where a.record_date>='2011-09-01' AND 
      a.record_date<='2012-08-01') sa 
RIGHT JOIN survey_question_options so 
     ON sa.option_id = so.option_id 
WHERE so.question_id=24 
GROUP BY so.option_label 
ORDER BY so.option_id ASC 
1

さて、あなたはメインテーブルから列にCOUNTを行っているので、LEFT JOIN上の性別の条件は、結果には影響しません。 テーブルの列にCOUNTを実行する必要があります。私はこれがあなたの望むものかどうかは分かりませんが、試してみるべきです:

SELECT COUNT(u.uid) AS answer , so.option_label 
FROM survey_answer sa 
RIGHT JOIN survey_question_options so 
     ON sa.option_id = so.option_id AND 
      sa.record_date>='2011-09-01' AND 
      sa.record_date<='2012-08-01' 
LEFT JOIN users u 
     ON (sa.uid = u.uid AND u.gender='M') 
WHERE so.question_id=24 
GROUP BY so.option_label 
ORDER BY so.option_id ASC 
0

条件を間違ったブロックに入れています。 LEFT JOIN(左側の外側結合)を実行しているため、左側のテーブル(メインテーブル)のすべてが結合テーブルのデータと共に選択されます。該当する場合はです。必要なのは、のデータをすべてusersに追加してから、クエリの完全な出力を制限することです。あなたが実際にやったことは、女性ユーザーからのユーザーデータを追加して、すべてのデータを表示することです。

技術的には聞こえますが、AND u.gender='F'WHERE句の代わりにON句に移動するだけです。これにより、の後にSQLが女性ユーザーの行だけを選択するようになります()。JOINが実行されます。

関連する問題