是插入还是替换 插入: insert into t2(lmid) select t1.蓝木编号 from t1 inner join t2 on find_in_set(t1.sy_kbj,t2.sy_key)>0 替换: update t2 a set lmid=( select group_concat(sy_kbj) from t1 where find_in_set(t1.sy_kbj,t2.sy_key)>0 )
我的做法是使用like来把表1的sy_kbj匹配到表2的sy_key中去 感觉有个缺点- -,如果表1的sy_kbj是“风景”,表2的sy_key中的某个key是“风景山水”,也会被匹配上。 但是看lz的表中,key都是两个字的,所以应该问题不大update table2 b set lmid=( select group_concat(a.`sy_kbj`) from table1 a, b where b.sy_key like concat('%',a.`sy_kbj`,'%'); )
set lmid=(
select group_concat(sy_kbj) from table1
where concat(',',a.sy_key,',') regexp
concat(',(',replace(sy_kbj,',','|'),'),')
)
REGEXP 正则的实现两个字符串组的匹配。
最近MySQL版块中类似问题出现得比较多。总结了一下。 由于某些原因,有时候我们没有按照范式的设计准则而把一些属性放到同一个字符串字段中。比如个人兴趣,有时候我们设计表为create table members (uid int primary key,uname varchar(20),hobby varchar(100));表中内容如下mysql> select * from ...
插入:
insert into t2(lmid)
select t1.蓝木编号 from t1 inner join t2 on find_in_set(t1.sy_kbj,t2.sy_key)>0
替换:
update t2 a
set lmid=(
select group_concat(sy_kbj) from t1
where find_in_set(t1.sy_kbj,t2.sy_key)>0
)
表2 sy_key c,d,e,a,d,d匹配 sy_kbj 与 sy_key 的分词,只要有一个相同。比较下,可能相关的会有多条那么 提取表1 栏目编号 的地一条 插入到 表2 lmid 中去。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
感觉有个缺点- -,如果表1的sy_kbj是“风景”,表2的sy_key中的某个key是“风景山水”,也会被匹配上。
但是看lz的表中,key都是两个字的,所以应该问题不大update table2 b
set lmid=(
select group_concat(a.`sy_kbj`)
from table1 a, b
where b.sy_key like concat('%',a.`sy_kbj`,'%');
)