Sqlite更新字段,如果它包含

时间:2008-09-30 04:51:21

标签: sql database sqlite syntax

给定一个名为“widget_ids”的数据库字段,其中包含“67/797 / 124 /”或“45 /”之类的数据,其中数字是斜杠分隔的widget_ids ...如何使用SQL创建更新语句说: “如果id为X的行的widget_ids包含文本”somenumber /“则不执行任何操作,否则将”somenumber /“附加到其当前值”

您可以使用SQL,或者更具体地说,sqlite执行类似的操作吗?这是因为某种原因在程序中做得更好还是支持SQL中的“if-then”语法?

2 个答案:

答案 0 :(得分:7)

更新有点像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/%";

答案 1 :(得分:3)

首先,摆脱符号分隔列表。使用另一个表,每行一个小部件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);