【发布时间】:2018-07-11 10:06:18
【问题描述】:
我有一个包含以下数据的表格:
------------------------------------------
|ID|Name|Value|State |Version|Replaced_by|
------------------------------------------
|1 |Joe |10 |New |1 |NULL |
------------------------------------------
|2 |Ben |15 |New |1 |NULL |
------------------------------------------
然后我添加例如 2 个新行:
------------------------------------------
|ID|Name|Value|State |Version|Replaced_by|
------------------------------------------
|1 |Joe |10 |New |1 |NULL |
------------------------------------------
|2 |Ben |15 |New |1 |NULL |
------------------------------------------
|3 |Joe |20 |New |2 |NULL |
------------------------------------------
|4 |Dan |10 |New |1 |NULL |
------------------------------------------
然后我想执行更新,更新 Name 和 State 组的最旧 Version 的 Replaced_by 值,ID 值是 Name 和 State 组的最新 Version 值,所以看起来像这样:
------------------------------------------
|ID|Name|Value|State |Version|Replaced_by|
------------------------------------------
|1 |Joe |10 |New |1 |3 |
------------------------------------------
|2 |Ben |15 |New |1 |NULL |
------------------------------------------
|3 |Joe |20 |New |2 |NULL |
------------------------------------------
|4 |Dan |10 |New |1 |NULL |
------------------------------------------
虽然我为我的问题找到了一个好看的答案,但它在 SQLite 中不起作用。我受到this 另一个问题的回答的启发。
UPDATE
table1
SET
replaced_by = i.id
FROM
(
SELECT
id, name, state, version
FROM
table1 t1
WHERE
version = (
SELECT
MAX(version)
FROM
table1
WHERE
t1.name = table1.name
AND t1.state = table1.state
AND t1.replaced_by IS NULL
)
) i
WHERE
table1.name = i.name
AND table1.state = i.state
AND table1.version = i.version
AND table1.replaced_by IS NULL
基本上,列 Replaced_by 用作附加的版本控制工具,并在从表中选择数据时减轻我的生活。
期待任何帮助。
【问题讨论】:
标签: sql sqlite sql-update