SQL中的表联接未返回预期结果

时间:2020-03-08 09:42:53

标签: mysql sql

我的数据库设计如下所示: DB Design

我有兴趣找出哪种问卷中存在哪些问题。

因此,我尝试了以下操作,以便输出调查表Welcome Questionnaire中存在的问题,但是在行中却没有返回结果:

SELECT `questionnaire`.`questionnaireName`, `questionnaireQuestions`.`questionID`,`question`.`question`
FROM `questionnaire`
INNER JOIN `questionnaireQuestions` ON `questionnaire`.`questionnaireID`=`questionnaireQuestions`.`questionID`
INNER JOIN `question` ON `questionnaire`.`questionnaireID` = `question`.`questionID`
WHERE `questionnaire`.`questionnaireName` = "Welcome Questionnaire";

我认为我必须在questionnaireID上进行2次内部联接,任何人都可以强调我在这里出错的地方。

我应该得到这个:

questions should be returned

2 个答案:

答案 0 :(得分:2)

从图中所示的表结构来看,您正在错误的字段上联接。您应该在questionnaireQuestions上将questionnaire插入questionnaireID,在questionnaireQuestions上将question加入questionID,即

SELECT `questionnaire`.`questionnaireName`, `questionnaireQuestions`.`questionID`,`question`.`question`
FROM `questionnaire`
INNER JOIN `questionnaireQuestions` ON `questionnaire`.`questionnaireID` = `questionnaireQuestions`.`questionnaireID`
INNER JOIN `question` ON `questionnaireQuestions`.`questionID` = `question`.`questionID`
WHERE `questionnaire`.`questionnaireName` = "Welcome Questionnaire";

请注意,使用表别名可以使查询更易于阅读;和反引号仅需转义表/列名称中的特殊字符,因此通常可以省略:

SELECT qa.questionnaireName, qq.questionID, qs.question
FROM questionnaire qa
INNER JOIN questionnaireQuestions qq ON qa.questionnaireID = qq.questionnaireID
INNER JOIN question qs ON qq.questionID = qs.questionID
WHERE qa.questionnaireName = "Welcome Questionnaire";

答案 1 :(得分:0)

或者,更少键入...

SELECT a.questionnaireName
     , b.questionID
     , b.question
  FROM questionnaire a
  JOIN questionnaireQuestions ab
    ON ab.questionnaireID = a.questionnaireID 
  JOIN question b 
    ON b.questionID = ab.questionID 
 WHERE a.questionnaireName = "Welcome Questionnaire";