gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:22:53 25 4
gpt4 key购买 nike

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

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

问题是我有另一个表“消息”,其中有一列“发送者”和“接收者”。这些列的每行都包含 user_name。

如何使用 INNER JOIN 才能收到只有男性发送给女性的消息?

我很容易知道如何指定一次,将 users.user_name 绑定(bind)到“发送者”或“接收者”,但不能同时绑定(bind)两者。

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

最佳答案

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 获取前十对。

关于mysql - 当我必须连接一个表两次时,如何在 SQL 中正确使用内连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28769096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com