题
给定名为“widget_ids”的数据库字段,其中包含诸如“67/797 / 124 /”之类的数据。或者“45 /”,其中数字是斜杠分隔的widget_ids ...你将如何使用SQL创建一个更新语句: “如果具有id X的行的widget_ids包含文本”somenumber /“什么也不做,否则追加“somenumber /”它的当前值“
您可以使用SQL,或者更具体地说,sqlite执行类似的操作吗?这是因为某些原因在程序中做得更好还是支持“if-then”喜欢SQL中的语法吗?
解决方案
更新有点像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/%";
其他提示
首先,摆脱符号分隔列表。使用另一个表,每行一个小部件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);
不隶属于 StackOverflow