注意:实际架构不是男/女,而是其他一些标准。我在这个例子中只使用男性/女性来使其更容易理解。
我有一个表" users",其中包含一列user_name和user_gender。性别可以是" M"或者" F"。
问题在于我有另一张桌子,#34;消息",其中有一列用于"发件人"和"接收者"。这些列在每行中包含user_name。
我如何使用INNER JOIN以便我可以获得只有男性发送给女性的消息?
我很容易知道如何指定一次,将users.user_name绑定到" sender"或"接收器"但不是两个。
为了扩展我的问题,如何查看男性向女性发送最多信息的前10对?注意,这意味着唯一的A / B对,所以我想返回一个人发送一个女性大量消息的情况,而不是当一个人向很多女性发送大量消息时。
答案 0 :(得分:1)
将您的messages
表视为"交叉表"连接users
表中的两行。当你加入这样的表时,给users
两个不同的别名,并在你的连接条件中引用它们,如下所示:
select *
from messages msg
join users m on msg.sender = m.user_id AND m.user_gender='M'
join users f on msg.receiver = f.user_id AND f.user_gender='F'
掌握了这个骨架,您应该能够找出其余的查询:
GROUP BY
按m.user_id, f.user_id
进行分组,count(*)
进行分组COUNT(*)
排序,以获得最高发送者+接收者对LIMIT
抓住前十对。