例子如下
name | discribe | d1 | d2 | d3 | d4 | d5 |
---|---|---|---|---|---|---|
张三 | d1总承包一级,d2专业承包二级 | 总承包一级 | 专业承包二级 | / | / | / |
李四 | d2专业承包一级,d5总承包特级 | / | 专业承包一级 | / | / | 总承包特级 |
王五 | d3专业承包二级;d5总承包一级 | / | / | 专业承包二级 | / | 总承包一级 |
mysql 使用 locate判断是否包含某个字符,这个是最快的
SELECT
name,describe,
CASE WHEN locate('d1',describe)>0 THEN 1 ELSE 0 end as d1,
CASE WHEN locate('d2',describe)>0 THEN 1 ELSE 0 end as d2,
CASE WHEN locate('d3',describe)>0 THEN 1 ELSE 0 end as d3,
CASE WHEN locate('d4',describe)>0 THEN 1 ELSE 0 end as d4,
CASE WHEN locate('d5',describe)>0 THEN 1 ELSE 0 end as d5
FROM content;
update content set d1=v.d1,d2=v.d2,d3=v.d3,d4=v.d4,d5=v.d5 from
(SELECT
name,describe,
CASE WHEN locate('d1',describe)>0 THEN 1 ELSE 0 end as d1,
CASE WHEN locate('d2',describe)>0 THEN 1 ELSE 0 end as d2,
CASE WHEN locate('d3',describe)>0 THEN 1 ELSE 0 end as d3,
CASE WHEN locate('d4',describe)>0 THEN 1 ELSE 0 end as d4,
CASE WHEN locate('d5',describe)>0 THEN 1 ELSE 0 end as d5
FROM content) as v
where id = v.id
建议使用python实现,思路如下:
select id, discribe from content
用子查询+字符串分拆:
或者用类似Outer apply的查询联合更新(示例仅查询)