# 痛定思痛 !!!!
# 笔者决定搞清楚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不具备这个功能
请把作者的链接贴他
# 看到这,还不赶紧点赞关注起来 ^ . ^