,282,3358,123,
表B
| ID | name |
+----+-------------------+
|282 | name_1 |
+----+-------------------+
|3358| name_2 |
+----+-------------------+
|123 | name_3 |
初始状况表A
... | ID | ...
-----+------------------------+-----
... | ,282,3358,123, | ...
表A的预期结果
... | ID | ...
-----+------------------------+-----
... | ,name_1,name_2,name_3, | ...
答案 0 :(得分:0)
只有一个sql指令可能非常困难,我会在MySQL中执行一个函数:
1)用表A创建一个游标 2)搜索表B中的每个值 3)使用B
中的值填充[new]字段20000行并不算太多。
答案 1 :(得分:0)
我找到了解决问题的方法。但是,每个字段使用多个条目真的不值得推荐。但是,如果你在像我这样的情况下,你必须使用这样一个无关联的计划数据库,而不允许改变方案,我们在这里:
SELECT [...] ,
(SELECT GROUP_CONCAT( table_B.name SEPARATOR ',' ) FROM table_B
WHERE FIND_IN_SET ( B.ID , SUBSTRING ( table_A.ID , 2 , length( table_A.ID ) -2 ) ) >0 ) ,
[...]
FROM table_A
一些解释:
SUBSTRING
才能在多字段条目的开头删除“,”。例如:SUBSTRING ( ",282,3358,123," , 2 , length( ",282,3358,123," ) -2 )
导致“282,3358,123”FIND_IN_SET
方法将值搜索到逗号分隔的字符串列表中,并返回值的索引。如果找不到任何值,则返回0.这就是为什么我将整个字符串与0进行比较。GROUP_CONCAT
方法连接匹配的名称。因此,它提供逗号分隔的字符串列表==> name_1,name_2,name_3
一些注释: