**已关闭。**此问题为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 |
有人能帮我弄明白为什么会这样吗?
2条答案
按热度按时间9w11ddsr1#
这是有意义的,因为c1.id(2)=c2.id(1)+1
r8xiu3jd2#
您的联接(
JOIN cte c2 ON c1.Id = c2.Id+1
)表示:在C2中查找ID与C1 + 1相同的记录。因此,如果C1 ID为1,则它在C2中查找2。
这就是为什么你会得到这个结果。