mysql中如何查询一张表的一列值在另一张表中的出现次数

现在有一张skilltable的表格,列举了所有的skill

img


然后有另一张表格叫做data,里面有一列是parse_job_text,工作详情信息

img

现在要查询skilltable表格中所有的skill,在data表格中详情信息出现的次数,最后得到这样的结果

img


请问怎么才能做到呢,目前的思路是笛卡尔连接,然后判断skill在不在parse_job_content这列,如果在就记为1,否则为0,不过这个语句怎么写呢,我想的用like通配符和in,都得不出正确的结果

【以下回答由 GPT 生成】

你可以使用子查询和聚合函数来实现这个查询。

首先,你可以编写一个子查询,该子查询可以计算每个技能在 parse_job_text 列中出现的次数。这可以通过使用 LIKE 运算符和使用通配符筛选出包含技能的内容来实现。然后,使用 COUNT 函数来计算筛选后的结果集中的行数。最后,使用 GROUP BY 子句将结果按技能进行分组。

以下是一个可能的解决方案:

SELECT skill, COUNT(*) AS occurrence
FROM skilltable
LEFT JOIN (
    SELECT skill, parse_job_text
    FROM skilltable
    CROSS JOIN data
    WHERE parse_job_text LIKE CONCAT('%', skill, '%')
) AS occurrences
USING (skill)
GROUP BY skill;

这个查询首先将 skilltable 表和 data 表进行笛卡尔连接,然后筛选出 parse_job_text 列中包含技能的行。接下来,使用 LEFT JOINskilltable 表与筛选后的结果进行连接,以包括那些没有出现在 data 表中的技能。最后,使用 GROUP BY 子句将结果按技能进行分组,并使用 COUNT 函数计算每个技能的出现次数。

请注意,这个查询可能会消耗大量的计算资源,特别是当 data 表包含大量数据时。你可能需要优化查询的性能,例如创建索引或使用其他查询技巧来加速查询过程。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^