私はツリーを表すSQLiteテーブルを使っています。列にはid
とparent
が含まれます。もちろん、各parent
の値は別の行のid
です。SQLite:UPDATEの "current"行への参照が必要です
また、changeCount
列があります。バルク操作で削除された各子に対して1ずつ増分する必要があります。
たとえば、IDと
- 行11、12及び13は、バルク操作で削除されようとしていると言います。
- id = 11およびid = 12の行は、両方とも同じparent = 5を持ちます。
- id = 13のローはparent = 8です。
次にID = 5の行は、そのchangeCountが2だけインクリメント有していなければならない、および実行する方法がなければならないように、ID = 8を有する行は、そのchangeCount 1.
インクリメント有していなければならないそれはそうこれは1つのクエリでおそらく次のようなものでしょう:
UPDATE myTable
SET changeCount = changeCount
+ (SELECT COUNT(*) FROM myTable
WHERE id IN (11,12,13) AND parent = XXXX);
式XXXXは、「現在の」行への参照である必要があります。 changeCountが設定されているものそれについての表現はありますか?あるいは、この問題に対するより良いアプローチがありますか? @CLによってコメントに
SQLiteは組み込みデータベースであり、「実」プログラミング言語と共に使用するように設計されています。なぜあなたは複数のSQL文を避けたいのですか? –
面白いコメント、@CL!正直言って私の経験の98%は「本当の」プログラミング言語です。 SQLiteでは、私はいつもシンプルなSELECTとUPDATEのような種類の人物であり、巧妙な単一のSQLステートメントでかなり複雑な要件を表現できるデータベースガウスを羨ましく思っています。この要件に遭遇したとき、私は中間レベルに過ぎないと思ったので、派手なSQLに挑戦しました。たぶん私はこの要件の難しさを過小評価しましたか? –