Mysql 将csv值替换为查找到另一个表

Mysql 将csv值替换为查找到另一个表,mysql,Mysql,我有一个带有标记字段的表,其值如下: table1 ______ data1, data2, data3 我有第二个表,它将id映射到每个数据块,如: table2 _________ id | info 1 | data1 2 | data2 3 | data3 等等 我想在表1中进行查找/替换,以便标记字段现在包含表2中以逗号分隔的id,如下所示: table1 ______ 1,2,3 UPDATE table1 SET tags = REPLACE(tags

我有一个带有标记字段的表,其值如下:

table1
______
data1, data2, data3
我有第二个表,它将id映射到每个数据块,如:

table2
_________
id | info
1  | data1
2  | data2
3  | data3
等等

我想在表1中进行查找/替换,以便标记字段现在包含表2中以逗号分隔的id,如下所示:

table1
______
1,2,3
   UPDATE table1   
   SET tags = REPLACE(tags, '', '')
   WHERE tags LIKE ???
我的mysql生锈了。我是这样想的:

table1
______
1,2,3
   UPDATE table1   
   SET tags = REPLACE(tags, '', '')
   WHERE tags LIKE ???
但是需要一些帮助来填补空白。有没有办法做到这一点?
可能值得注意的是,不幸的是,不是t1标记中的每个项目都会在t2中有一个匹配的条目。

表1中是否真的只有一行

在任何情况下,您都可以通过重新构造id字符串来执行您想要的操作:

update table1
    set tags = (select group_concat(t2.id)
                from t2
                where find_in_set(t2.info, t1.tags) > 0
               )
如果希望顺序与原始标记的顺序相同:

update table1
    set tags = (select group_concat(t2.id order by find_in_set(t2.info, t1.tags))
                from t2
                where find_in_set(t2.info, t1.tags) > 0
               )

嗯。这似乎不起作用,因为我在更新的字段中只看到一个值,其他值都是空的。我应该提到,如果t2中没有匹配项,理想情况下,我希望在t1标记字段中保留现有值。@jco。这实际上改变了问题的结构。如果确实需要这样做,我建议您更改数据库的结构,使标记位于单独的行上,而不是位于逗号分隔的列表中。此类列表通常表示数据库结构较差。换句话说,这个答案是为了避开糟糕的数据库设计,但您不想走得太远。谢谢。我明白你的意思。由于列表不太大,我正计划“清理”不匹配项,因为我在一个新项目的开始。谢谢你的帮助!