mysql复杂更新和替换

时间:2010-10-10 19:57:23

标签: mysql replace inner-join sql-update

我有一个有趣的查询,我想知道是否有人可以提供帮助?

基本上,我有三个表,Title,Attribute和Attribute_Value

标题包含一个模板列表,例如“在[类别}中由{用户}创建{日期}”,然后在属性表中,我有行包含用大括号括起来的参数的定义。

然后在attribute_value表中,我有值。

我遇到的问题是Query在查询完成之前似乎没有在每行上存储替换,这意味着该行只接收上一次更新,不完整。

update Title inner join Attribute_Value on Attribute_Value.GenericID = Title.CollectibleID and Attribute_Value.GenericType = 'collectible' inner join Attribute on Attribute.AttributeID = Attribute_Value.AttributeID set Title.Title = replace(Title.Title, concat('{', Attribute.Name, '}'), Attribute_Value.Value)

基本上,它会正确替换{Date},但是当它替换{User}时,{Date}不是替换值,但仍然是{Date},与{Category}相同。但是当它完成时,

我是如何知道如何使用值更新Title列,同时保留以前替换的值?

干杯

GAV株系

2 个答案:

答案 0 :(得分:1)

您可以编写一个stored procedure,使用cursor一次更新一个Title中的属性。

答案 1 :(得分:0)

如果属性列表是静态的,我可能会使用子查询和嵌套的SQL REPLACE()。否则,编写自己的SQL函数来迭代所有可能的属性名称并进行替换。