我正在使用sql querys在java上创建一个程序,我想更新一个id序列,每个id加1,但只在序列间隔中。
假设我有一张这样的表:
1 - a | 2 - b | 3 - c | 5 - e | 6 - f
我想将一个ID和子句向前“推”1,但只有当彼此之间的差异仍为1.结果将是这样的:
2 - a | 3 - b | 4 - c | 5 - e | 6 - f
我知道可以以编程方式进行,但是有没有办法用SQL查询来做到这一点?如果没有,最好的方法是什么?
提前致谢。
编辑:感谢Thorsten Kettner找到答案,我的查询结果如下:
update pair set id = id + 1
where id >= 1
and id <
(
select min(id)
from (select * from pair) as gap
where gap.id > 1 and not exists
(
select *
from (select * from pair) as oneless
where oneless.id = gap.id - 1
)
)
order by id desc
答案 0 :(得分:0)
让我们调用你的表对和两列Key和Value。您的查询将是这样的:
#include <QWidget.h> // inheriting from this class os this include is needed
QT_FORWARD_DECLARE_CLASS(QPushButton) // don't have to include "QPushButton.h" in this header file
class Widget1 : QWidget
{
Q_OBJECT
public:
Widget1(QWidget* parent = nullptr);
private:
QPushButton* myButton;
};
PS。我假设你的结果有拼写错误,因为在更新之后,f应该有一个值7。
答案 1 :(得分:0)
如果您知道要关闭的差距(在您的情况下为ID 4),请使用:
update mytable set id = id + 1 where id < 4;
如果您不知道差距在哪里,请找到它:
select min(id) - 1
from mytable
where not exists
(
select *
from mytable oneless
where oneless.id = mytable.id - 1
);
我们现在可以将这两个语句结合起来进行更新:
update mytable set id = id + 1
where id <
(
select min(id) - 1
from mytable
where not exists
(
select *
from mytable oneless
where oneless.id = mytable.id - 1
)
);