Обновите поле Sqlite, если оно содержит
Вопрос
Дано поле базы данных с именем "widget_ids", содержащее данные типа "67/797/124 /" или "45 /", где числа разделены косой чертой widget_ids...как бы вы создали инструкцию update с помощью SQL, которая гласила бы:"если widget_ids строки с идентификатором X содержит текст "somenumber/", ничего не делайте, в противном случае добавьте "somenumber /" к его текущему значению"
Можете ли вы сделать что-то подобное с SQL, или, более конкретно, с sqlite?Это что-то, что по какой-то причине лучше сделать в программе, или в SQL есть поддержка синтаксиса, подобного "if-then"?
Решение
Обновления сами по себе похожи на 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/%";
Другие советы
Во-первых, избавьтесь от списка, разделенного символами.Используйте другую таблицу с одним идентификатором виджета в строке.
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);
Теперь вы можете проверить, ссылается ли штучка 1234 на виджет 45:
SELECT * FROM ThingieWidgets
WHERE thingie_id = 1234 AND widget_id = 45;
Вы можете попытаться вставить и восстановить файл, если произошла ошибка с дубликатом ключа:
INSERT INTO ThingieWidgets (thingie_id, widget_id)
VALUES (1234, 45);