关于SQL中ON子句的疑问:LEFT JOIN条件x.Id+1=y.Id如何工作?
理解SQL中的
ON x.Id +1 = y.Id条件 这段SQL是自连接操作——把Weather表自己和自己关联,x和y是给同一张表起的别名,用来区分两个不同的"副本"。
ON x.Id +1 = y.Id的作用
这个条件的核心是让x表中的每一行,和y表中Id恰好比它大1的行配对:
- 当x表某行的Id是
n,就会找到y表中Id为n+1的行,把这两行拼接成一条记录。 - 如果y表中不存在Id为
n+1的行(比如x是最后一行Id),LEFT JOIN会保留x的行,但y的所有字段会是NULL。
结合整体SQL逻辑
再看后面的WHERE x.Temperature < y.Temperature,就是从配对好的记录里,筛选出**前一天(x对应行)温度低于后一天(y对应行)**的情况,最后返回y的Id——也就是温度升高那天的Id。
举个实际数据例子更清楚:
假设Weather表有以下数据:
| Id | Temperature |
|---|---|
| 1 | 10 |
| 2 | 15 |
| 3 | 12 |
| 4 | 20 |
自连接后的配对记录(符合ON条件的):
- x行(1,10) ↔ y行(2,15):10<15,符合WHERE条件,返回y.Id=2
- x行(2,15) ↔ y行(3,12):15>12,不符合
- x行(3,12) ↔ y行(4,20):12<20,符合,返回y.Id=4
- x行(4,20):找不到y.Id=5的行,y字段全为NULL,WHERE条件不成立,被过滤
最终查询结果就是2和4。
内容的提问来源于stack exchange,提问作者Nandy
相关产品推荐
相关产品推荐

