我已经做了几年的SQL,在整个过程中,我对连接的想法就是等价连接,就像在
select ... from t1 join t2 on t1.a = t2.b
Run Code Online (Sandbox Code Playgroud)
请注意,此处的连接是基于一个或多个等式t1.a = t2.b.但是,最近,我不记得在哪里,我看到了一个非等价的连接(我只是把这个术语放了,请告诉我它是否有真实的名称),其中连接条件包含至少一个不相等的,如在
select ... from t1 join t2 on t1.a > t2.b
Run Code Online (Sandbox Code Playgroud)
可以做一些好事,特别是外连接.让我用一个例子来说明这一点.
让我们考虑一个名为products的表,其中包含以下数据:
product year price
----------------------
apple 2009 4
apple 2008 2
apple 2007 5
apple 2006 6
apple 2005 2
banana 2009 9
banana 2008 12
banana 2007 16
banana 2006 15
banana 2005 10
Run Code Online (Sandbox Code Playgroud)
我们希望通常"为每个产品提供最昂贵的年份",据我所知,通常使用内部联接到按产品分组的同一个表,如下所示:
select t1.`name`, t1.`year`, t1.`price`
from products as t1 join
( select `name`, max(`price`) as `max_price` from products …Run Code Online (Sandbox Code Playgroud) 我的目标是在列中返回具有相同值的开始和结束日期。这是我的桌子。已标记 (*) 以让您了解我希望如何为 A 和 B 列的每个相似序列值获取“EndDate”
ID | DayDate | A | B
-----------------------------------------------
1 | 2010/07/1 | 200 | 300
2 | 2010/07/2 | 200 | 300 *
3 | 2010/07/3 | 150 | 250
4 | 2010/07/4 | 150 | 250 *
8 | 2010/07/5 | 150 | 350 *
9 | 2010/07/6 | 200 | 300
10 | 2010/07/7 | 200 | 300 *
11 | 2010/07/8 | 100 | 200
12 | 2010/07/9 | 100 …Run Code Online (Sandbox Code Playgroud)