使用子查询中的列子集(单个表)选择完整行

时间:2012-08-18 20:09:13

标签: sql

我正在尝试解决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(子查询

感谢您的任何评论...

3 个答案:

答案 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;

Updated SQL Fiddle.

答案 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