在 SQLite 本地数据库中,我有一个 2 列表,一个包含值,一个包含类别。我想根据以下选择更新某些行的类别:
我现在的声明(不起作用)如下:
UPDATE table SET category = '3' WHERE
(
value BETWEEN
(
((SELECT value FROM table WHERE category = '2') +4)
AND
((SELECT value FROM table WHERE category = '2') -4)
EXCEPT SELECT value FROM table WHERE category = '2'
)
... (further constraints)
)
这运行没有错误,但实际上似乎没有选择任何内容,因为没有更新。使此更新正常工作的正确方法是什么?
编辑:根据要求提供表格示例:
行号 | 价值 | 类别 |
---|---|---|
1 | 20 | 2 |
2 | 30 | 2 |
3 | 40 | 2 |
4 | 70 | 2 |
5 | 5 | 1 |
6 | 19 | 1 |
7 | 26 | 1 |
8 | 42 | 1 |
9 | 49 | 1 |
10 | 52 | 1 |
11 | 71 | 1 |
12 | 90 | 1 |
我希望当前属于类别 1 的行的值被放置在类别 3 中,基于类别 2 中行值周围的范围 4。所以在这种情况下,任何具有类别 = 1 的行,其值为 16-24、26-34、36-44 或 66-74。
行号 | 价值 | 类别 |
---|---|---|
1 | 20 | 2 |
2 | 30 | 2 |
3 | 40 | 2 |
4 | 70 | 2 |
5 | 5 | 1 |
6 | 19 | 3 |
7 | 26 | 3 |
8 | 42 | 3 |
9 | 49 | 1 |
10 | 52 | 1 |
11 | 71 | 3 |
12 | 90 | 1 |
您可以使用EXISTS
:
UPDATE tablename
SET Category = 3
WHERE Category = 1
AND EXISTS (
SELECT 1
FROM tablename t
WHERE t.Category = 2
AND tablename.Value BETWEEN t.Value - 4 AND t.Value + 4
);
请参阅演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句