mysql SQL自联接如何执行其操作?[已关闭]

ivqmmu1c  于 2023-03-11  发布在  Mysql
关注(0)|答案(2)|浏览(122)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
23小时前关门了。
Improve this question
我正在尝试理解SQL自连接。我有以下表天气

+----+------------+-------------+
| id | recordDate | temperature |
+----+------------+-------------+
| 1  | 2015-01-01 | 10          |
| 2  | 2015-01-02 | 25          |
| 3  | 2015-01-03 | 20          |
| 4  | 2015-01-04 | 30          |
+----+------------+-------------+

(来源:Leetcode
我想得到一个表,其中包含的数据与它以前的日期(昨天)相比,温度更高。所以,我执行了这个MySQL查询。

WITH cte AS (SELECT *
FROM Weather w1
ORDER BY w1.recordDate)

SELECT c1.*, c2.*
FROM cte c1
JOIN cte c2 ON c1.Id = c2.Id+1

但它给了我这个输出,我没有预料到。

| id | recordDate | temperature | id | recordDate | temperature |
| -- | ---------- | ----------- | -- | ---------- | ----------- |
| 2  | 2015-01-02 | 25          | 1  | 2015-01-01 | 10          |
| 3  | 2015-01-03 | 20          | 2  | 2015-01-02 | 25          |
| 4  | 2015-01-04 | 30          | 3  | 2015-01-03 | 20          |

我期待上述查询的输出。

| id | recordDate | temperature | id | recordDate | temperature |
| -- | ---------- | ----------- | -- | ---------- | ----------- |
| 1  | 2015-01-01 | 10          | 2  | 2015-01-02 | 25          |
| 2  | 2015-01-02 | 25          | 3  | 2015-01-03 | 20          |
| 3  | 2015-01-03 | 20          | 4  | 2015-01-04 | 30          |

有人能帮我弄明白为什么会这样吗?

9w11ddsr

9w11ddsr1#

这是有意义的,因为c1.id(2)=c2.id(1)+1

r8xiu3jd

r8xiu3jd2#

您的联接(JOIN cte c2 ON c1.Id = c2.Id+1)表示:在C2中查找ID与C1 + 1相同的记录。
因此,如果C1 ID为1,则它在C2中查找2。
这就是为什么你会得到这个结果。

相关问题