当我必须连接两次表时,如何在SQL中正确使用内连接?

时间:2015-02-27 15:53:08

标签: mysql sql join

注意:实际架构不是男/女,而是其他一些标准。我在这个例子中只使用男性/女性来使其更容易理解。

我有一个表" users",其中包含一列user_name和user_gender。性别可以是" M"或者" F"。

问题在于我有另一张桌子,#34;消息",其中有一列用于"发件人"和"接收者"。这些列在每行中包含user_name。

我如何使用INNER JOIN以便我可以获得只有男性发送给女性的消息?

我很容易知道如何指定一次,将users.user_name绑定到" sender"或"接收器"但不是两个。

为了扩展我的问题,如何查看男性向女性发送最多信息的前10对?注意,这意味着唯一的A / B对,所以我想返回一个人发送一个女性大量消息的情况,而不是当一个人向很多女性发送大量消息时。

1 个答案:

答案 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 BYm.user_id, f.user_id进行分组,count(*)进行分组
  • COUNT(*)排序,以获得最高发送者+接收者对
  • 使用LIMIT抓住前十对。