Mysql SQL问题:内部联接给了我空数据集

Mysql SQL问题:内部联接给了我空数据集,mysql,sql,Mysql,Sql,请看一看这个问题- 我采用的方法是将表与表本身连接起来,然后将我的where条件放在一起,以获得我想要的数据。这是我写的查询:- SELECT wt1.Id FROM Weather wt1 inner join Weather wt2 on wt1.id = wt2.id WHERE wt1.Temperature > wt2.Temperature AND TO_DAYS(wt1.recordDate)-TO_DAYS(wt2.recordDate)=1;

请看一看这个问题-

我采用的方法是将表与表本身连接起来,然后将我的where条件放在一起,以获得我想要的数据。这是我写的查询:-

SELECT wt1.Id FROM Weather wt1 
    inner join 
Weather wt2 on wt1.id = wt2.id
WHERE wt1.Temperature > wt2.Temperature AND 
      TO_DAYS(wt1.recordDate)-TO_DAYS(wt2.recordDate)=1;
这给了我一个空的数据集

但是,如果我不使用join,只使用天气表两次,它就会工作。我的问题是:-

SELECT wt1.Id 
FROM Weather wt1, Weather wt2
WHERE wt1.Temperature > wt2.Temperature AND 
      TO_DAYS(wt1.recordDate)-TO_DAYS(wt2.recordDate)=1;

我想知道内部联接有什么不同,以及为什么它不起作用。

两个变量都没有实际起作用的查询的正确版本是:

SELECT wt1.Id
FROM Weather wt1 
INNER JOIN Weather wt2
    ON wt1.Temperature > wt2.Temperature AND 
       TO_DAYS(wt1.recordDate) - TO_DAYS(wt2.recordDate) = 1;

这将使用一个适当的显式自联接和条件。请注意,
wt1.id=wt2.id
连接条件是可疑的,因为假设
id
是主键或唯一列,给定记录永远不能有来自同一列的两个不同温度值。

两个变量都没有实际执行的正确查询版本是:

SELECT wt1.Id
FROM Weather wt1 
INNER JOIN Weather wt2
    ON wt1.Temperature > wt2.Temperature AND 
       TO_DAYS(wt1.recordDate) - TO_DAYS(wt2.recordDate) = 1;

这将使用一个适当的显式自联接和条件。请注意,
wt1.id=wt2.id
连接条件是可疑的,因为假设
id
是主键或唯一列,给定的记录不能有来自同一列的两个不同温度值。

您的第一个查询不应该有
wt1.id=wt2.id
条件,第二个查询应该使用显式联接。第一个查询不应该具有
wt1.id=wt2.id
条件,第二个查询应该使用显式联接。好的。非常感谢。现在我明白为什么第一个查询是错误的了。但我们为什么需要加入呢?第二个查询也可以工作,不需要自连接。我还建议将第二个条件写为
wt2.recordDate=wt1.recordDate-INTERVAL 1 DAY
,这样它就可以从索引中受益。好的。非常感谢。现在我明白为什么第一个查询是错误的了。但我们为什么需要加入呢?第二个查询也可以工作,不需要自连接。我还建议将第二个条件写为
wt2.recordDate=wt1.recordDate-INTERVAL 1 DAY
,这样它就可以从索引中受益。