我正在尝试解决this table, sql statement and comments
中说明的以下问题TABLE COLUMNS:id,version,idx_on; PK是'id'栏
所以,我从子查询中获得了一组元组{id,version}。
我想为所有行设置IDX_ON值,其ID和VERSION与上面的子查询'元组中的ID相同。或者,选择具有相同标准的所有行(ID,VERSION,IDX_ON)将是良好的第一步。
我试图使用类似的东西: SELECT * FROM docs中的ID,VERSION(子查询)
感谢您的任何评论...
答案 0 :(得分:2)
您可以更新存在更高版本的所有行:
update (
select *
from docs d1
where exists
(
select *
from docs d2
where d1.id = d2.id
and d2.version > d1.version
)
)
set idx_on = 0;
答案 1 :(得分:1)
这似乎有效:
update docs d
set d.idx_on = 0
where exists (select * from docs where id = d.id and version > d.version);
答案 2 :(得分:0)
我不熟悉Oracle的SQL语法,如果与SQL-Server相同,请尝试以下方法:
UPDATE d
SET d.idx_on = 0
FROM docs d
INNER JOIN
( SELECT id,
MAX(version) AS "version"
FROM docs
GROUP BY id
)
q
ON q.id = d.id
AND q.version = d.version