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:assignment_answers

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 回答