mysql - 它没有在查询中显示任何结果

标签 mysql sql

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 

我上面的查询显示了一组空结果,尽管它应该显示一些结果。它应该显示每个不同的问题(我的意思是它应该清楚地显示行,以便不存在在所有列中包含完全相同数据的重复行)任何人都可以修复查询,以便它输出它应该输出的结果输出?下表为:

session 表:

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

最佳答案

我稍微改变了你的查询,我得到了结果。首先,我更改为使用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 |

关于mysql - 它没有在查询中显示任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14197749/

相关文章:

sql - 将 where 子句与 Union 一起使用

php - 什么是可以在 PHP 5.3 上解析和重建 SQL 查询的优秀查询生成器?

mysql - mysql存储过程中的return关键字

mysql - 如何使用 MySQL 主键创建动态页面?

android - 在 android 中建立与 MySQL 的池连接

mysql 列结果的一部分不同

mysql - 安装 mysql 作为 gem

sql - SQL Server 中整数和字符串相加的输出

sql - Greenplum 与 PostgreSQL

php - 从表中排序数据,分配给变量然后从另一个文件调用