我有这张表,其中包含值:
val
1
2
3
7
8
9
该表还有一个 id 列,现在不相关。
我想插入一个值,但规则是不能有任何重复的值。假设我插入一个新的 2,当前的 2 应该变成 3,依此类推,直到值 3,它会变成 4。在这种情况下,不需要移动值 7、8 和 9 '.
我正在使用 SQLite。在所需的新值持有者被“移动”之后,插入或更新部分可以在单独的查询中完成。
到目前为止,我使用的是:
//being n my new value.
UPDATE values SET val = val+1 WHERE val >= n
但这也会修改不需要修改的 7,8 和 9。
关于如何解决这部分问题有什么想法吗?将更新限制为仅连续值?
在一个查询中执行整个插入/更新的更好方法也将非常受欢迎。
最佳答案
使用 LEFT JOIN
的解决方案 #1:
http://sqlfiddle.com/#!5/7eeea/12
UPDATE t
SET val = val+1
WHERE val >= 2
AND val <= (
SELECT MIN(t1.val)
FROM t AS t1
LEFT JOIN t AS t2 ON t1.val+1 = t2.val
WHERE t1.val >= 2
AND t2.val IS NULL
);
NOT EXISTS
的解决方案 #2:
http://sqlfiddle.com/#!5/7eeea/17
UPDATE t
SET val = val+1
WHERE val >= 2
AND val <= (
SELECT MIN(t1.val)
FROM t AS t1
WHERE t1.val >= 2
AND NOT EXISTS (SELECT 1 FROM t AS t2 WHERE t1.val+1 = t2.val)
);
关于sql - 使用 SQLite 从 n 中查找连续的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492932/