我想向用户展示结果。即他尝试的问题,回答的结果以及他无人看管的那些问题。我有一张表包含问题母版,一张表是答案母版。我想显示用户的总结。下面是我的表结构。目前,我只能通过以下查询获得尝试的问题及其答案
SELECT t1.exam_type,t1.questions,a1.answer,t1.correct_ans FROM tbl_que t1 LEFT JOIN tbl_ans a1 ON a1.que_id=t1.que_id WHERE t1.exam_type='1' AND a1.user_id='001' ORDER BY t1.que_id
但是我也想针对特定用户提出未解决的问题。
tbl_que
que_id |exam_type |exam_name |questions |correct_ans
1 |1 |railway |que1 |ansA
2 |1 |railway |que2 |ansC
3 |2 |post |que3 |ansC
4 |2 |post |que4 |ansA
5 |1 |railway |que5 |ansB
tbl_ans
ans_id |exam_type |answer |user_id |que_id
1 |1 |right |001 |1
2 |1 |wrong |001 |2
3 |1 |right |002 |3
4 |1 |right |002 |4
Output/result
|exam_type |question |answer |correct_ans
|1 |que1 |right |ansA
|1 |que2 |wrong |ansC
|1 |que5 |NULL |ansB
答案 0 :(得分:4)
您只需要更改您的WHERE
子句:
WHERE t1.exam_type='1' AND (a1.user_id='001' OR a1.user_id IS NULL)
这将在结果中包含来自tbl_que的所有问题,这些问题没有任何用户(因此包括用户001)的答案。
输出:
exam_type questions answer correct_ans
1 que1 right ansA
1 que2 wrong ansC
1 que5 (null) ansB
答案 1 :(得分:1)
尝试使用左联接:
arg
答案 2 :(得分:1)
如何将user_id的条件放在LEFT JOIN的ON子句中?
在SQL Fiddle here上进行测试
select
q.exam_type,
q.questions,
a.answer,
q.correct_ans
from tbl_que q
left join tbl_ans a on (a.que_id = q.que_id and a.user_id='001')
where q.exam_type = 1
order by q.que_id
答案 3 :(得分:0)
您还可以通过在左联接本身中添加user_id
条件来解决此问题。
以下查询应为您工作。
SELECT
t1.exam_type, t1.questions, a1.answer, t1.correct_ans
FROM
tbl_que t1
LEFT JOIN tbl_ans a1 ON a1.que_id = t1.que_id AND a1.user_id = '001'
WHERE
t1.exam_type = '1' ORDER BY t1.que_id