2008-09-30 38 views
3

给定一个名为“widget_ids”的数据库字段,其中包含数据像“67/797/124 /”或“45 /”,其中数字是斜杠分隔的widget_ids ...你会如何做一个更新语句与SQL会说: “如果id为X的行的widget_ids包含文本”somenumber /“什么都不做,否则将”somenumber /“附加到它的当前值”如果它包含Sqlite更新字段

你能做那样的事吗?与SQL,或更具体地说,SQLite?那是因为某种原因在程序中做得更好,还是支持SQL中的“if-then”类似的语法?

回答

7

在大多数SQL实现中,更新有点像if-thens本身,而且如果支持某种类型的话也是如此。一个简单的解决方案可能是:

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

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

好点,但不幸的是,sqlite并没有真正支持外键实施。 – foobar 2008-09-30 11:34:06

相关问题