SQLite多个左联接查询返回重复项

时间:2020-06-10 16:48:45

标签: sqlite join sql-order-by

我使用此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

1 个答案:

答案 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