2

我正在尝试解决以下问题,在此表中说明,sql 语句和注释

表列:id、版本、idx_on;PK 是 'id' 列

所以,我从子查询中得到一组元组{ id, version}。

我想为 ID 和 VERSION 与上面子查询元组中的所有行设置 IDX_ON 值。或者,选择具有相同标准的所有行(ID、VERSION、IDX_ON)将是一个很好的第一步。

我尝试使用类似的东西但没有成功:SELECT * FROM docs where ID, VERSION in ( subquery )

感谢您的任何评论...

4

3 回答 3

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;

更新了 SQL 小提琴。

于 2012-08-18T20:17:01.873 回答
1

这似乎有效:

update docs d
set d.idx_on = 0 
where exists (select * from docs where id = d.id and version > d.version);
于 2012-08-18T20:44:59.703 回答
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
于 2012-08-18T20:23:07.913 回答