gpt4 book ai didi

SQL Server 在列上匹配两个表

转载 作者:行者123 更新时间:2023-12-03 01:51:15 25 4
gpt4 key购买 nike

我有两个表,一个存储用户技能,另一个存储工作所需的技能。我想将每个用户的技能与一份工作相匹配。表结构为

Table1: User_Skills
| ID | User_ID | Skill |
---------------------------
| 1 | 1 | .Net |
---------------------------
| 2 | 1 | Software|
---------------------------
| 3 | 1 | Engineer|
---------------------------
| 4 | 2 | .Net |
---------------------------
| 5 | 2 | Software|
---------------------------

Table2: Job_Skills_Requirement
| ID | Job_ID | Skill |
--------------------------
| 1 | 1 | .Net |
---------------------------
| 2 | 1 | Engineer|
---------------------------
| 3 | 1 | HTML |
---------------------------
| 4 | 2 | Software|
---------------------------
| 5 | 2 | HTML |
---------------------------

我试图用逗号分隔技能并进行比较,但这些技能的顺序可能不同。

编辑这里的所有答案都非常好。我正在寻找的结果是将所有职位与所有用户相匹配,稍后我还将匹配其他属性。

最佳答案

您可以通过 skill 列连接表格并计算匹配数:

SELECT   user_id, job_id, COUNT(*) AS matching_skills
FROM user_skills u
JOIN job_skills_requirement j ON u.skill = j.skill
GROUP BY user_id, job_id

编辑:
如果您还想显示没有匹配技能的用户和职位,则可以使用完全外部联接

SELECT          user_id, job_id, COUNT(*) AS matching_skills
FROM user_skills u
FULL OUTER JOIN job_skills_requirement j ON u.skill = j.skill
GROUP BY user_id, job_id

编辑2:
正如 Jiri Tousek 所评论的,如果用户和职位之间不匹配,上述查询将产生 null。如果您想要它们之间有完整的笛卡尔积,您可以使用(滥用?)交叉连接语法并计算每个用户和每个工作之间实际匹配的技能数量:

SELECT     user_id, 
job_id,
COUNT(CASE WHEN u.skill = j.skill THEN 1 END) AS matching_skills
FROM user_skills u
CROSS JOIN job_skills_requirement j
GROUP BY user_id, job_id

关于SQL Server 在列上匹配两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42580660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com