SQL查询,用于根据其他表的关系数据相互比较行

时间:2013-12-12 20:12:04

标签: mysql sql

首先,如果我的问题过于宽泛,我会提前道歉。我没有很多SQL经验,我正在努力设计一个非常具体的任务查询。我绝不会要求有人做所有的工作。我只是想要一些关于如何构建查询的指导,以及它是否完全在SQL中完成任务是一个很好的解决方案。

我正在尝试构建的查询需要列出一个表中的所有行,彼此匹配并通过在另一个表中检查已匹配的行数来比较它们。为了说明,我有以下表格:

members (member_id, name)
questions (question_id, title)
answers (answer_id, question_id, title)
members_answers (member_id, question_id, answer_id)
members_acceptable_answers (member_id, question_id, answer_id)

每个成员在members_answers中只有一条记录,在members_acceptable_answers中只有多条记录。

我想要展示的是每个成员的列表以及他们可接受的答案中有多少与其他成员的答案相匹配,产生如下结果:

member_id | member_id | total_intercepted |
-------------------------------------------
        1 |         2 |                10 |
        2 |         3 |                 6 |
        1 |         3 |                 3 |

我可以在应用程序级别创建数据,但我想知道是否有适当的方法在数据库中完成此操作。我一直在尝试不同的查询,但没有一个甚至接近产生结果,甚至不值得一提。

再次 - 如果这样的任务甚至仅适用于SQL,我只想获得有关如何构建查询和意见的指导。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

这可能是一个好的开始......你可能需要一些索引来解决这个问题,但这里有一些启动SQL:

SELECT ma.member_id AS 'Member 1',
       ma2.member_id AS 'Member 2',
       count(maa.answer_id) AS 'Total Matches'
FROM members_answers ma
  JOIN questions q
    ON q.question_id = ma.question_id
  JOIN questions q2 
    ON q.question_id = q2.question_id
  JOIN members_answers ma2
    ON ma2.question_id = q2.question_id
  JOIN members_acceptable_answers maa
    ON  ma2.answer_id = maa.answer_id 
    AND ma.member_id = maa.member_id
GROUP BY 1,2
ORDER BY 1,2

这样......你只计算那些回答潜在匹配成员问的问题的成员,然后你正在计算匹配的总答案,包括第二个成员。

希望这会有所帮助......

托尼

答案 1 :(得分:0)

我认为开始学习sql的好地方是http://www.w3schools.com/sql/default.asp,要从多个表中获取需要加入表的数据,以确定需要完成哪些连接,请查看本文{{ 3}}和比较数据使用除了语句