前述
知识点学习:自连接和笛卡尔积连接的区别
题目描述
leetcode题目:1204. 最后一个能进入巴士的人
方法一:窗口函数
sql
select person_name
from(
select *,
sum(weight) over(order by turn) as sumweight
from Queue
) A
where sumweight <= 1000
order by sumweight desc
limit 1;
方法二:自连接
sql
select A.person_name
from Queue A, Queue B
where A.turn >= B.turn
group by A.person_id
having sum(B.weight) <= 1000
order by A.turn desc
limit 1;
自连接和笛卡尔积连接的区别
引用 自连接和笛卡尔积连接的区别 总结:
1. 自连接:同一张表被当作不同表(设置不同别名)进行连接
- 自连接顾名思义就是自己连接自己,因此只有一张表用来连接生成临时表;
- 自连接需要通过"where"关键字来设置连接条件,而不是通过"on";
2. 笛卡尔积连接:不设置连接条件的连接
- 连接的表可以是同一张表(要设置不同的别名,否则报错),也可以是多张不同的表;
- 笛卡尔积连接的原理是不管两张或多张表的记录是否匹配,均一一对应生成新的记录,因此笛卡尔积连接不设置连接条件(如on,wher等)。