我正在创建一个志愿者技能管理场景,类似于学生/班级/年级矩阵。
因此,我有三张桌子:
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的每一项技能,排名大于零的每个人的full_name,以及t3的排名和id。最后一项,skill_assessments.id将用于更新。
但所有这些表都有其他列,我希望从查询结果中删除这些列。例如,志愿者表有11列。
如果我在t3上执行一个简单的select查询“其中排名> 0",就会得到1180行的查询结果(在3108行中),这一点在下面的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
;发布于 2022-11-16 15:46:07
从基础开始。
的列
我想看看t1的每一项技能
您需要从table1中选择每个技能行,需要一个左联接。
的排名和id。
在这里,您需要使用条件table2与table3内部连接where table3.ranking > 0
最后一个查询是:
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;https://stackoverflow.com/questions/74462856
复制相似问题