Вопрос

Дано поле базы данных с именем "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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top