含まれる場合、Sqlite更新フィールド
質問
「widget_ids」という名前のデータベースフィールドがあり、「67/797/124 /」などのデータが含まれている場合、または" 45 /&quot ;、ここで数字はスラッシュで区切られたwidget_idsです... SQLでupdateステートメントをどのように作成しますか。 " ID Xの行のwidget_idsにテキスト" somenumber /"が含まれている場合何もしない、それ以外の場合は" somenumber /"を追加する現在の値に」"
SQL、より具体的にはsqliteを使用して、そのようなことを実行できますか?それは何らかの理由でプログラムでより良く行われているものですか、または「if-then」のサポートがありますか? SQLの構文が好きですか?
解決
更新は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/%";
他のヒント
最初に、シンボルで区切られたリストを取り除きます。行ごとに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がウィジェット45を参照しているかどうかをテストできます:
SELECT * FROM ThingieWidgets
WHERE thingie_id = 1234 AND widget_id = 45;
キーの重複エラーが発生した場合、挿入および回復を試みることができます。
INSERT INTO ThingieWidgets (thingie_id, widget_id)
VALUES (1234, 45);
所属していません StackOverflow