我希望找到与一组相同问题具有相同答案的完全匹配列。他们的答案可能会有所不同,我想找到两个人回答相同的答案,我想得到他们唯一的回复ID。
SELECT
response
FROM
responses_questions
WHERE (
SELECT
answer
FROM
responses_questions
WHERE
response = '$my_response_id'
GROUP BY
question
ORDER BY
question
ASC
) = (
SELECT
answer
FROM
responses_questions
GROUP BY
question
ORDER BY
question
ASC
)
我完全清楚上面的查询将 NOT 工作。
主要问题是我需要将“条件查询”(由几行组成)与数据库的其余部分进行比较,以返回匹配的列组的响应ID。基本上,对于每个问题,我需要他们的所有答案与我们要比较的“示例”查询相同。 “比较两个子查询”。
我可以轻松地查看我需要获取的数据;尽管如此,SQL没有考虑到我们人类“可视化”的内容......
如果我需要提供更多信息,请在下面的评论中告诉我。
编辑:截图/更多数据
以下是一些示例数据的屏幕截图:
突出显示的数据是我们在上面查询的“第一”部分中选择的内容。我需要找到MATCHES的所有数据。
我的预期输出应该是response
列中的以下数字:5
和7
。但不是6
。
请记住:会有数百个问题,因此需要更多行进行“比较”。因此,请勿对任何特定问题编号进行硬编码。
答案 0 :(得分:1)
<强> EDITED 强>
我在第一次尝试回答时意识到,我误解了你的问题。我想你正试图找到哪些人得到100%,对吧?如果我错了,请告诉我。
SELECT b.response
FROM responses_questions b
LEFT JOIN responses_questions a
ON a.question = b.question
AND a.answer = b.answer
AND a.response = '$my_response_id'
AND a.response != b.response
GROUP BY b.response
HAVING COUNT(DISTINCT a.question) = COUNT(DISTINCT b.question)
这是通过每个人分组来获得每个人的问题和答案的集合。我们加入了一个只有你所说的“示例”响应ID的表格版本,我们加入使得问题和答案都匹配。我们使用左连接,以便任何不匹配的条目在a
表上具有NULL。最后,我们计算每个表中的条目数。 NULL条目不会添加到计数中,因此如果存在任何不匹配的行,则a
表的计数将小于b
表的计数。
顺便说一下,你让我警惕你 - 耶!'$my_response_id'
卡在中间。最好使用准备好的查询。我希望你正在消化你的投入。
修改的
我添加了一张检查,以确保它不会返回4的“示例”ID。它应该可以正常工作。我做了一个sqlfiddle,就像你要求的那样得到5和7。