直接上代码:
分割(行转列)并去重
SELECT distinct id,
SUBSTRING_INDEX(SUBSTRING_INDEX(contract_email, ',', n), ',', -1) AS item
FROM `product`.supplier_service_metadata ,
(SELECT @rownum := @rownum + 1 AS n
FROM (SELECT @rownum := 0) r,
`product`.supplier_service_metadata) x
WHERE n <= (LENGTH(contract_email) - LENGTH(REPLACE(contract_email, ',', '')) + 1)
再根据id不同 重新整合到一条数据
select id, GROUP_CONCAT(item) as emails from (
SELECT distinct id,
SUBSTRING_INDEX(SUBSTRING_INDEX(contract_email, ',', n), ',', -1) AS item
FROM `product`.supplier_service_metadata ,
(SELECT @rownum := @rownum + 1 AS n
FROM (SELECT @rownum := 0) r,
`product`.supplier_service_metadata) x
WHERE n <= (LENGTH(contract_email) - LENGTH(REPLACE(contract_email, ',', '')) + 1)
)A
group by id