Поле обновления Sqlite, если оно содержит - PullRequest
3 голосов
/ 30 сентября 2008

Учитывая поле базы данных с именем "widget_ids", содержащее такие данные, как "67/797/124 /" или "45 /", где числа разделены косой чертой widget_ids ... как бы вы сделали оператор обновления с SQL, который бы сказать: «если widget_ids строки с идентификатором X содержит текст« somenumber / », ничего не делайте, в противном случае добавьте« somenumber / »к его текущему значению»

Можете ли вы сделать что-то подобное с SQL или, точнее, с sqlite? Это что-то, что лучше сделать в программе по какой-то причине или есть поддержка синтаксиса типа if-then в SQL?

Ответы [ 2 ]

7 голосов
/ 30 сентября 2008

Обновления подобны самим if-thens, и в большинстве реализаций 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/%";
3 голосов
/ 30 сентября 2008

Во-первых, избавьтесь от списка, разделенного символами. Используйте другую таблицу с одним идентификатором виджета на строку.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...