[英]SQL::Self join a table to satisfy a particular condition?
我有下表:
mysql> SELECT * FROM temp;
+----+------+
| id | a |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+----+------+
我正在尝试获得以下输出:
+----+------+------+
| id | a | a |
+----+------+------+
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
+----+------+------+
但我有一个小问题。 我写了以下查询:
mysql> SELECT A.id, A.a, B.a FROM temp A, temp B WHERE B.a>A.a;
但我的输出如下:
+----+------+------+
| id | a | a |
+----+------+------+
| 1 | 1 | 2 |
| 1 | 1 | 3 |
| 2 | 2 | 3 |
| 1 | 1 | 4 |
| 2 | 2 | 4 |
| 3 | 3 | 4 |
+----+------+------+
有人可以告诉我如何将其转换为所需的输出吗? 我试图获得一种仅产生连续值的表格。 我的意思是,如果2大于1且3大于2,我不希望3大于1。
选项1:“三角连接”-二次复杂度
SELECT A.id, A.a, MIN(B.a) AS a
FROM temp A
JOIN temp B ON B.a>A.a
GROUP BY A.id, A.a;`
选项2:“伪Row_Number()”-线性复杂度
select a_numbered.id, a_numbered.a, b_numbered.a
from
(
select id,
a,
@rownum := @rownum + 1 as rn
from temp
join (select @rownum := 0) r
order by id
) a_numbered join (
select id,
a,
@rownum2 := @rownum2 + 1 as rn
from temp
join (select @rownum2 := 0) r
order by id
) b_numbered
on b_numbered.rn = a_numbered.rn+1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.