我有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_bank
和assignment_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'
两个查询都会导致重复相同的多行。
有任何建议,想法,想法吗?
提前致谢。
答案 0 :(得分: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
答案 1 :(得分: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
。这被认为是一种糟糕的风格,因为当你的模式将增长到数百个表时,将很难编写查询。因此,使用通用命名模式并在类似地命名不同表中的列是一个很好的习惯。