表中有多个字段,字段含多个值,值用逗号隔开,在另一张表中查询对应值并显示成为一张表(例子见图片)。

table1与table2均为mysql数据库中的表,项目成员表为查询结果,求sql语句。希望大佬指点
 

恕我直言 这数据库这么设计,工作?劝你回去再学一年,学习?那还不如打游戏

尽管这么恶心 顶着恶心;还是写了sql,只能说能跑,效率什么的,不想说话

 

 

 

 

sql:

 

 

 

 

SELECT
    tab1.*,
    tab2.test_persons_name AS '测试人员' 
FROM
    (
    SELECT
        t.id,
        t.project_name AS '项目名称',
        t4.real_name AS 'pm_name',
        GROUP_CONCAT( t3.real_name ) AS 'develop_persons_name' 
    FROM
        (
        SELECT
            SUBSTRING_INDEX( SUBSTRING_INDEX( develop_persons, ',', t2.help_topic_id ), ',',- 1 ) AS user_id,
            t1.id,
            t1.pm,
            t1.project_name 
        FROM
            table1 t1
            LEFT JOIN mysql.help_topic t2 ON t2.help_topic_id <= ( LENGTH( t1.develop_persons ) - length( REPLACE ( t1.develop_persons, ',', '' ) ) + 1 ) 
        WHERE
            t2.help_topic_id > 0 
        ) t
        LEFT JOIN table2 t3 ON t.user_id = t3.user_id
        LEFT JOIN table2 t4 ON t.pm = t4.user_id 
    GROUP BY
        t.id,
        t.project_name 
    ) tab1
    LEFT JOIN (
    SELECT
        t.id,
        GROUP_CONCAT( t3.real_name ) AS 'test_persons_name' 
    FROM
        (
        SELECT
            SUBSTRING_INDEX( SUBSTRING_INDEX( test_persons, ',', t2.help_topic_id ), ',',- 1 ) AS user_id,
            t1.id 
        FROM
            table1 t1
            LEFT JOIN mysql.help_topic t2 ON t2.help_topic_id <= ( LENGTH( t1.test_persons ) - length( REPLACE ( t1.test_persons, ',', '' ) ) + 1 ) 
        WHERE
            t2.help_topic_id > 0 
        ) t
        LEFT JOIN table2 t3 ON t.user_id = t3.user_id 
    GROUP BY
    t.id 
    ) tab2 ON tab1.id = tab2.id