mySQL:如何在三个表的连接中选择特定的列,而不是使用 *?

zrfyljdw  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(137)

我正在创建一个志愿者技能管理场景,类似于学生/班级/年级矩阵。
我有三个表:

table1: skill_categories (28 rows)
fields:
skill_id (int,pk)
skill (varchar)

table2: volunteers (111 rows)
fields:
vol_id (int,pk)
full_name (varchar)

table3: skill_assessments (3108 rows)
fields:
id  (int,pk)
skill_id (int)
vol_id (int)
ranking (int)

我想查看t1中的每个技能,t2中排名大于零的每个人的全名,最后是t3中的排名和id。最后一项skill_assessments.id将用于更新。
但是这三个表都有其他列,我想从查询结果中删除这些列,例如volunteers表有11列。
如果我在t3“where ranking〉0”上执行一个简单的选择查询,我将得到一个1180行的查询结果(3108行中的1180行),这在下面的JOIN语句的结果中得到证实。
所有这一切都框定了这个问题:如何在三表联接中选择特定列?
我从该查询中获得了所需的确切行,但我想删除许多列:

SELECT * 
from skill_categories 
LEFT JOIN skill_assessments ON skill_assessments.skill_id = skill_categories.skill_id 
LEFT JOIN volunteers ON volunteers.vol_id = skill_assessments.vol_id 
WHERE skill_assessments.ranking > 0 
ORDER BY skill_categories.skill ASC, skill_assessments.ranking DESC
;
qoefvg9y

qoefvg9y1#

从基础做起。

  • 仅选择真正需要的列

我想看看t1的每一个技能
您需要从table1中选择每个技能行,需要左连接。

  • 来自T2的具有大于零的等级的每个人的全名,以及最后来自T3的等级和ID

这里需要使用条件where table3.ranking > 0将table2与table3进行内连接
期末查询:

select sc.skill,
       v.full_name,
       sa.id,
       sa.ranking
from skill_categories sc
left join skill_assessments sa on sc.skill_id=sa.skill_id 
inner join volunteers v on v.vol_id=sa.vol_id
where sa.ranking > 0;

相关问题