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 に答える