SQL中如何将值表与列名表合并?含5张业务表场景
没问题,我来帮你搞定这两个值表和列名表的合并需求。咱们分两个场景来写SQL,分别处理技能组和技能的关联:
1. 合并技能组值表(T4: skillgroup person)与技能组名列(T2: skillgroup names)
T4里的skillgroupID对应T2的id字段,用INNER JOIN就能把这两张表关联起来,拿到带技能组名称的完整数据:
SELECT t4.name AS person_name, t2.name AS skillgroup_name, t4.value AS skillgroup_score FROM `skillgroup person` t4 INNER JOIN `skillgroup names` t2 ON t4.skillgroupID = t2.id;
这个查询会返回每个人对应的技能组名称和分值,比如Alice的sgn1(40分)、sgn2(38分)这类数据。如果想保留T4里所有记录(哪怕T2里没有对应ID的情况),可以把INNER JOIN换成LEFT JOIN。
2. 合并技能值表(T5: skill person)与技能名列(T3: skill names)
和上面的逻辑一样,用skillID关联T3的id字段即可:
SELECT t5.name AS person_name, t3.name AS skill_name, t5.value AS skill_score FROM `skill person` t5 INNER JOIN `skill names` t3 ON t5.skillID = t3.id;
同样,要是需要保留T5里的所有记录(不管T3有没有对应技能名称),改用LEFT JOIN就行。
可选:关联人员详情表(T1)获取更多信息
如果还想把人员的年龄、性别也加进来,可以再关联T1:
比如技能组的完整查询:
SELECT t1.name AS person_name, t1.age, t1.gender, t2.name AS skillgroup_name, t4.value AS skillgroup_score FROM `skillgroup person` t4 INNER JOIN `skillgroup names` t2 ON t4.skillgroupID = t2.id INNER JOIN people t1 ON t4.name = t1.name;
技能的完整查询同理,把T4和T2换成T5和T3就行。
内容的提问来源于stack exchange,提问作者user3231746
相关产品推荐
相关产品推荐

