0

私はこれを回避しようとしました。しかし、私はどこにも到達していないと思います。

私は3つのテーブルを持っています:

この物語には、すべての質問と質問の種類が含まれています。

    Table: Ref
    id    |    type   |   info
    ==========================
    1          SS         Education
    ---------------------------
    2          RB         Gender
    ---------------------------
    3          ST         State

この表には、上記の表の質問の「オプション」が含まれています'Ref`

    Table: ref_ans
    id    |  q_id   |   answer_text
    ===========================
    1          1        Masters     
    ---------------------------
    2          1        Bachelors     
    ---------------------------
    3          1        Undergrad
    ---------------------------
    4          2        Male     
    ---------------------------
    5          2        Female
    ---------------------------
    6          2        Dont want to disclose

このテーブルには状態が含まれています(テーブルのtype= "ST" Ref

    Table: us_states

    id    |  answer_text 
    ===========================
    1        Alaska     
    ---------------------------
    2        Alabama     
    ---------------------------
    3        Arkansan
    ---------------------------
    4        Arizona     
    ---------------------------
    5        Baltimore
    ---------------------------
    etc

私が欲しい結果は次のとおりです。

    ref.id, ref_ans.id, ref.answer_text / us_states.answer_text

*特定のref.question_id*に対して。

条件は次のとおりです。要求された回答が「ST」であるquestion_idの場合は、から回答を取得する必要があります。us_statesそれ以外の場合は、ref-ansテーブルから取得する必要があります。

これを試してみました。明らかに、これは機能しませんでした:

    SELECT ref.id, 
         CASE WHEN ref.type = 'ST' THEN 
             (SELECT ID, answer_text FROM us_states )
         ELSE 
             (SELECT id, answer_text FROM ref_ans)  
    END

    FROM ref
   WHERE ref.ID = <id>

何か案は?

4

2 に答える 2

1

試す:

SELECT    a.id, 
          COALESCE(b.id, c.id) AS ans_id,
          COALESCE(b.answer_text, c.answer_text) AS answer_text
FROM      ref a
LEFT JOIN ref_ans b ON a.id = b.q_id
LEFT JOIN us_states c ON a.type = 'ST'
WHERE     a.id = <id> AND (
              (a.type <> 'ST' AND b.id IS NOT NULL) OR
              (a.type =  'ST' AND c.id IS NOT NULL)
          )
于 2012-08-29T21:32:11.040 に答える
0

3つのテーブルすべてがid(1列目)で接続されていると仮定します。

  SELECT ref_ans.id, ref.id, if(ref.type='ST', us_states.answer_text, ref_ans.answer_text) as answer_text
    FROM ref_ans  
    JOIN ref  on ref.id=ref_ans.id
    JOIN us_states on ref.id=us_states.id
    WHERE ref_ans.q_id = <id>
于 2012-08-29T22:11:35.553 に答える