我使用此SQL语句来获取调查问卷答复。语句中的第一个左连接用于获取相应问题的正确答案。 (这部分工作正常)。我被告知的语句中的第二个左联接使我能够逐行使用订单。但是,使用此第二个联接意味着将复制结果。我需要使用此行,因为我希望按问题所在的顺序(位置)给出问卷的答复。
SQL表
question table:
id position text
name 1 who
col 3 what
reason 2 why
questionaire_responses table:
id questionaire
uuid uuid
uuid uuid
uuid uuid
question_response table:
response_id question answer
uuid name sdfk
uuid col red
uuid reason why not
SQL查询
SELECT questionaire_responses.id, question_response.question, question_response.answer
FROM question_response
LEFT JOIN questionaire_responses ON questionaire_responses.id = question_response.responses_id
LEFT JOIN questions ON questionaire_responses.questionaire = questions.questionaire
WHERE questionaire_responses.questionaire = "f52ebe78-7c93-40b5-a9f0-3f20deb245ac"
ORDER BY questions.position
答案 0 :(得分:-1)
您几乎正确。 您希望您的主要限制因素是questionaire_responses.questionaire,但是您要在questionaire_response上选择第一,没有限制。 您的查询说:“给我所有的question_response行,如果有的话,加入在response_id上匹配的questionaire_responses行。加上所有与questionaire匹配的问题。哦,限制在questionaire uuid上搜索questionaire_responses ,但无论您是否找到匹配的响应条目,仍要给我所有响应条目。” 因此,如果将其翻转并选择questionaire_response并加入questionaire_response,您将得到“给我所有questionaire_responses行以及匹配的questionaire uuid。现在将其加入相应的questionaire_response行。” 这是更改后的查询。
SELECT DISTINCT questionaire_responses.id, question_response.question, question_response.answer, questions.position
FROM question_responses
LEFT JOIN questionaire_response ON question_response.responses_id = questionaire_responses.id
LEFT JOIN questions ON questionaire_responses.questionaire = questions.questionaire
WHERE questionaire_responses.questionaire = "f52ebe78-7c93-40b5-a9f0-3f20deb245ac"
ORDER BY questions.position