如果您想选择具有超过所需技能的agent_name(但包含所需技能),您应该更改开启条件:
on t2.skills_for_task LIKE CONCAT('%', t1.skill_for_task, '%') ;
SELECT agent_name,task_id,skill_for_task
FROM
(
select task_id,group_concat(skill) as skill_for_task
from task
group by task_id
) as t1
INNER JOIN
(
select agent_name,group_concat(skills) as skills_for_task
from skill
group by agent_name
) as t2
on t2.skills_for_task LIKE CONCAT('%', t1.skill_for_task, '%') ;
演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=66efe141b29b6d38ddf95e13b8ff1e68
结果:
agent_name task_id skill_for_task
abc 1 x,y
pqr 1 x,y
开启Postgres 13
SELECT agent_name,task_id,skill_for_task
FROM
(
select task_id,string_agg(skill,',') as skill_for_task
from task
group by task_id
) as t1
INNER JOIN
(
select agent_name,string_agg(skills,',') as skills_for_task
from skill
group by agent_name
) as t2
on t2.skills_for_task LIKE CONCAT('%', t1.skill_for_task, '%') ;
演示:https://dbfiddle.uk/?rdbms=postgres_13&fiddle=b1df46bb1bf750d7ec0ade979ba9a465
结果:
agent_name task_id skill_for_task
abc 1 x,y
pqr 1 x,y