3

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

你能用 SQL 或者更具体地说是 sqlite 做类似的事情吗?出于某种原因,这是在程序中更好地完成的事情,还是支持 SQL 中的类似“if-then”的语法?

4

2 回答 2

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/%";
于 2008-09-30T05:08:14.137 回答
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);
于 2008-09-30T06:16:16.267 回答