SQLite更新字段(如果包含)
时间:2020-03-06 14:54:28 来源:igfitidea点击:
给定一个名为" widget_ids"的数据库字段,其中包含诸如" 67/797/124 /"或者" 45 /"之类的数据,其中的数字以斜杠分隔的widget_ids ...如何使用SQL编写一条更新语句,内容如下:
"如果标识为X的行的widget_ids包含文本" somenumber /",则不执行任何操作,否则将" somenumber /"添加到其当前值"
我们可以使用SQL或者更具体的说是sqlite做类似的事情吗?是出于某种原因在程序中做得更好的事情,还是在SQL中支持" if-then"之类的语法?
解决方案
更新有点像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是否引用了小部件45:
SELECT * FROM ThingieWidgets WHERE thingie_id = 1234 AND widget_id = 45;
如果存在重复的密钥错误,我们可以尝试插入和恢复:
INSERT INTO ThingieWidgets (thingie_id, widget_id) VALUES (1234, 45);