mysql单独一个join是_你真的懂MYSQL中Join 一对多的使用姿势么?

# 痛定思痛 !!!!

# 笔者决定搞清楚MYSQL JOIN的原理

# 并分享给大家

* 什么是一对多的情况?

如上图所示,表一的1001id在表二中存在多条记录

* 常规的inner join的使用姿势

```sql

select a.用户名 ,b.用户行为 from 表一 a INNER JOIN 表二 b ON a.用户id = b.用户id

```

但是!这里如果希望取得最近一次的用户行为的话,就有出现问题

因为,这里表二中有多条1001的用户的行为

那么该用什么姿势来使用呢?

我们先来看个图

敲重点!!!

inner join 是取两个”集合“的交集

注意!

集合,这个词,您细品

所以,上面的join语句可以翻译为

``` sql

select a.用户名 , b.用户行为 from 集合一 as a 和 集合二 as b

```

不知道,你有没有想到如何修改上面的join语句

让它符合你的需求呢?

思路一:

只需要将原SQL的表二替换为去重之后的集合即可

```sql

SELECT a.用户名, b.用户行为

FROM 表一 a

INNER JOIN (

SELECT *

FROM 表二

WHERE id IN (

SELECT MAX(id)

FROM 表二

GROUP BY 用户id

)

) b

ON a.用户id = b.用户id;

```

思路二:

将表一和表二看成一个大集合,再对这个集合进行order by + limit 处理

```sql

SELECT a.用户名, b.用户行为, b.id AS bid

FROM 表一 a

INNER JOIN 表二 b ON a.用户id = b.用户id

ORDER BY bid DESC

LIMIT 1;

```

到这里,不知道

你看懂了没

下次,再有人跟你讲

MYSQL不具备这个功能

请把作者的链接贴他

# 看到这,还不赶紧点赞关注起来 ^ . ^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值