1

データを取得するテーブルが 3 つあります。

表 1 : assignment_status

primary_key   
test_group_id | s_id | date_taken | status
q1            | 123  | 2012-08-13 | completed

表 2: question_bank

 foreign key    unique key |
 group_id     | q_id       | question
 q1           | 1          | What is your name?
 q1           | 2          | Where were you born?

表 3: 割り当て_回答

foreign key  
g_id         | q_id | s_id  | s_answer
q1           | 1    |  123  | Mark Johnson
q1           | 2    |  123  | Florida 

現在、対応する質問の回答を表示しようとしています。私が直面している問題は、返された結果セットが複数回ループしていることです。

たとえば、question_bankassignment_answersがそれぞれ 2 つのレコードを持つ場合、結果セットには 4 つのレコードが含まれます。両方にそれぞれ 4 つのレコードがある場合、結果セットには 16 のレコードがあります。したがって、数は二乗されます。これにより、間違った方法で引っ張っていることを確認できます。以下は、私が使用しているクエリです。

SELECT 
    * 
FROM 
    assignment_status s, 
    question_bank b, 
    assignment_answers a
WHERE 
    s.test_group_id = b.group_id = a.g_id = 'q1'

私も試しました

SELECT 
    * 
FROM 
    question_bank b, 
    assignment_answers a
WHERE 
    b.group_id = a.g_id
    AND b.group_id = 'q1'
    AND a.g_id = 'q1'

どちらのクエリでも、同じ複数の行が繰り返されます。

提案、アイデア、考えはありますか?

前もって感謝します。

4

2 に答える 2

1

question_bank b、assignment_answers aの条件が抜けていると思います

SELECT 
    * 
FROM 
    assignment_status s, 
    question_bank b, 
    assignment_answers a
WHERE 
    s.test_group_id = b.group_id = a.g_id = 'q1' AND b.q_id = a_q.id
于 2012-08-13T11:25:54.720 に答える
0

質問/回答は 2 つの列で識別されるため、テーブルを結合するときにそれらを使用する必要があります。このような何かがトリックを行うかもしれません:

SELECT as.s_id, as.date_taken, as.status,
       qb.group_id, qb.q_id, qb.question,
       aa.s_answer
  FROM assignment_status as
  JOIN question_bank qb ON as.test_group_id = qb.group_id
  JOIN assignment_answers aa ON aa.g_id = qb.group_id AND aa.q_id = qb.q_id
 WHERE as.test_group_id = 'q1';

注: のように、テーブルに異なる名前の列がありますtest_group_id <--> group_id <--> g_id。これは悪いスタイルと見なされます.スキーマが数百のテーブルに成長すると、クエリを書くのが難しくなります. したがって、共通の命名パターンを使用し、異なるテーブルの列に同じように名前を付けるのは良い習慣です。

于 2012-08-13T11:37:42.733 に答える