3

「widget_ids」という名前のデータベース フィールドがあり、「67/797/124/」や「45/」などのデータを含み、数字がスラッシュで区切られた widget_ids である場合...次のような SQL で更新ステートメントを作成するにはどうすればよいでしょうか。 ID X の行の widget_ids にテキスト "somenumber/" が含まれている場合は何もせず、それ以外の場合は "somenumber/" を現在の値に追加します"

SQL、より具体的には sqlite でそのようなことができますか? なんらかの理由でプログラムでより適切に実行されるものですか、それとも SQL の「if-then」のような構文のサポートはありますか?

4

2 に答える 2

7

更新は、if-then 自体のようなものであり、ほとんどの SQL 実装で何らかの if-then サポートもあります。簡単な解決策は次のとおりです。

update <tablename>
  set widget_id = widget_id + "somenumber/"
  where row_id = X
    and widget_id not like "%/somenumber/%"
    and widget_id not like "somenumber/%";
于 2008-09-30T05:08:14.137 に答える
3

まず、記号区切りリストを取り除きます。行ごとに 1 つのウィジェット ID を持つ別のテーブルを使用します。

CREATE TABLE ThingieWidgets (
  thingie_id INT REFERENCES Thingies,
  widget_id INT REFERENCES Widgets,
  PRIMARY KEY(thingie_id, widget_id)
);

スラッシュで区切られたリストの値をテーブルに入力します。

INSERT INTO ThingieWidgets (thingie_id, widget_id)
  VALUES (1234, 67), (1234, 797), (1234, 124);

これで、Thingie 1234 が Widget 45 を参照しているかどうかをテストできます。

SELECT * FROM ThingieWidgets
WHERE thingie_id = 1234 AND widget_id = 45;

重複キー エラーがある場合は、挿入と回復を試みることができます。

INSERT INTO ThingieWidgets (thingie_id, widget_id)
  VALUES (1234, 45);
于 2008-09-30T06:16:16.267 に答える