0

次の表があります。

CREATE TABLE dataTable(
    ParentID INTEGER,
    MyIndex INTEGER,
    // other stuff
    PRIMARY KEY (ParentID, MyIndex )
);

特定の範囲にある値の「MyIndex」列の値を減らそうとしています。その目的のために、私は次の声明を持っていると思います:

UPDATE dataTable 
SET MyIndex = (MyIndex - ?)
WHERE ((ParentID = ?) AND (MyIndex BETWEEN ? AND ?)) 

「MyIndex」の値が高いアイテムを先に減らしてしまうと、まだ減っていないアイテムと重複する可能性があるので、問題が発生する可能性があると思います。たとえば、値が (5, 4, 3) で、1 だけ減らされた場合、5 が 4 になると、主キー違反が発生する可能性があります。ただし、値が 3、4、5 の順序で変更されていれば問題ありません。

そのため、代わりに次のステートメントを使用しようとしていました。

UPDATE dataTable 
SET MyIndex = (MyIndex - ?)
WHERE ((ParentID = ?) AND (MyIndex BETWEEN ? AND ?)) 
ORDER BY MyIndex ASC

しかし、次のエラーが表示されます:「"ORDER" の近く: 構文エラー」。ORDER BY の何が問題になっていますか?

4

1 に答える 1

1

更新が終了するまで制約の整合性が適用されないため、最初のクエリは正常に機能します。ORDER BY は UPDATE ステートメントではサポートされていません。

于 2012-12-30T21:16:48.767 に答える