首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL:如何使用*在三个表连接中选择特定列?

mySQL:如何使用*在三个表连接中选择特定列?
EN

Stack Overflow用户
提问于 2022-11-16 15:09:02
回答 1查看 23关注 0票数 -1

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

因此,我有三张桌子:

代码语言:javascript
复制
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语句中得到了确认。

所有这些都是为了解决这个问题:如何在一个三表联接中选择特定的列?

我从这个查询中得到了所需的确切行,但我想删除很多列:

代码语言:javascript
复制
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
;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-16 15:46:07

从基础开始。

  • 只选择真正需要

的列

我想看看t1的每一项技能

您需要从table1中选择每个技能行,需要一个左联接。

  • :每个人的排名大于零的full_name,最后是t3

的排名和id。

在这里,您需要使用条件table2与table3内部连接where table3.ranking > 0

最后一个查询是:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74462856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档