【发布时间】:2017-04-10 06:37:28
【问题描述】:
发布有效的问题和 SQL 解决方案。我的困惑是,当我过去进行自联接时,要加入的列中总是有一些相等的值(相等运算符),但在下面的示例中,似乎自联接可以在不使用相等运算符的情况下工作?在下面的示例中,使用减号运算符和>,没有相等运算符来指定用于连接的列。
想知道如果没有相等运算符,在我的示例中底层自联接是如何工作的?
问题,
给定一个 Weather 表,编写一个 SQL 查询来查找与之前(昨天)日期相比温度更高的所有日期的 ID。
+---------+------------+------------------+
| Id(INT) | Date(DATE) | Temperature(INT) |
+---------+------------+------------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+---------+------------+------------------+
例如,为上面的 Weather 表返回以下 Id:
+----+
| Id |
+----+
| 2 |
| 4 |
+----+
SQL 解决方案,
select W1.Id
from Weather W1, Weather W2
where TO_DAYS(W1.Date)-TO_DAYS(W2.Date) = 1 and W1.Temperature > W2.Temperature
【问题讨论】:
-
这适用于哪个 RDBMS?无论您使用的是 MySQL、PostgreSQL、Oracle、SQL Server 还是 IBM DB2——甚至是其他东西,它通常都会产生影响。请为您的问题添加相关标签!
-
@marc_s,它适用于 MySQL 5.x。