相关疑难解决方法(0)

非等价连接

我已经做了几年的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)

mysql sql sql-server oracle postgresql

5
推荐指数
1
解决办法
218
查看次数

如何从对列中的每个常见值序列进行分组的 mysql 表中创建期间日期范围

我的目标是在列中返回具有相同值的开始和结束日期。这是我的桌子。已标记 (*) 以让您了解我希望如何为 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)

mysql select date-range sequence

1
推荐指数
1
解决办法
3427
查看次数

标签 统计

mysql ×2

date-range ×1

oracle ×1

postgresql ×1

select ×1

sequence ×1

sql ×1

sql-server ×1