它不会在查询中显示任何结果

时间:2013-01-07 14:17:38

标签: mysql sql mysqli

SELECT DISTINCT q.QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT(DISTINCT Answer ORDER BY Answer SEPARATOR '') AS Answer, r.ReplyType, 
q.QuestionMarks
FROM Answer an 
INNER JOIN Question q ON q.QuestionId = an.QuestionId
JOIN Reply r ON q.ReplyId = r.ReplyId 
JOIN Option_Table o ON q.OptionId = o.OptionId 

我上面的查询显示一组空的结果,即使它应该显示一些结果。它假设显示每个不同的问题(我的意思是它应该明确地显示行,以便没有重复的行包含所有列中完全相同的数据)任何人都可以修复查询,以便输出结果它应该输出?以下是表格:

会议桌:

SessionId  SessonName
3          ANDES

问题表:

QuestionId  SessionId   QuestionNo  QuestionContent       NoofAnswers   ReplyId     QuestionMarks   OptionId
1           3           1           What is 2+2?          1                 1           5               2
2           3           2           What is 2+2?          1                 1           5               2
3           3           3           Name these 2 flowers  2                 2           5               4

答案表:

AnswerId (Auto)  QuestionId  Answer
1                1           A
2                1           B
3                2           A
4                2           D
5                3           C

回复表:

ReplyId  ReplyType
1        Single
2        Multiple

选项表:

OptionId OptionType
1        A-C
2        A-D
3        A-E
4        A-F

1 个答案:

答案 0 :(得分:1)

我略微改变了你的查询,我得到了结果。首先,我更改为使用LEFT JOIN,如果附加表中没有答案等,您将收到问题。其次,由于您使用的是聚合函数GROUP_CONCAT(),因此需要使用GROUP BY

SELECT
  q.QuestionContent, 
  o.OptionType, 
  q.NoofAnswers, 
  GROUP_CONCAT(DISTINCT Answer ORDER BY Answer SEPARATOR '') AS Answer, 
  r.ReplyType, 
  q.QuestionMarks
FROM Question q
LEFT JOIN Answer an
  ON q.QuestionId = an.QuestionId
LEFT JOIN Reply r 
  ON q.ReplyId = r.ReplyId 
LEFT JOIN Option_Table o 
  ON q.OptionId = o.OptionId 
group by q.QuestionContent

请参阅SQL Fiddle with Demo

返回结果:

|      QUESTIONCONTENT | OPTIONTYPE | NOOFANSWERS | ANSWER | REPLYTYPE | QUESTIONMARKS |
----------------------------------------------------------------------------------------
| Name these 2 flowers |        A-F |           2 |      C |  Multiple |             5 |
|         What is 2+2? |        A-D |           1 |    ABD |    Single |             5 |