sql - 如何加入几个表并将id与另一个表中的名称列连接
问题描述
我有这些具有以下列名称的表:
玩家:
id first_name last_name 年龄 职位 薪水 雇用日期 技能_数据_id team_id
技能:
id, dribbling, pace, passing, shooting, speed, strength
城市:
id, name, country_id
团队:
id name established fan_base stadium_id
在这个基础上,我找到了他们所在球队所在城镇的速度最快的球员。
同时,我必须跳过在'Devify'队中打球的球员。
目前我已尝试使用此代码,但最终结果不正确。
select max(s.speed) as `max_speed`,tt.name as `town_name`
from skills_data as s
right join players as p on s.id = p.skills_data_id
inner join teams as t on p.team_id = t.id
inner join towns as tt on p.team_id = tt.id
where t.name not like 'Devify'
group by s.id
order by max(s.speed) desc, town_name;
结果应该是这样的:
max_speed town_name
97 Smolensk
92 Bromma
92 Lühua
...
NULL Zavolzh’ye
我的结果是:
max_speed town_name
97 Montréal-Ouest
92 Dalubian
92 Samsan
先感谢您。
解决方案
您的条款中有一个问题group by
:您应该按城镇而不是按技能 ID 分组。
我也对引入的连接条件非常怀疑towns
(请参阅我在您的问题下的评论):但是如果您正在为现有查询获得结果,那么它一定是正确的......
您的查询的其他更改:
把你改成
right join
了inner join
使用更有意义的表别名
使用不等式条件而不是
not like
排除不需要的团队
新查询:
select
max(sk.speed) as max_speed,
to.name as `town_name`
from skills_data as sk
inner join players as pl on sk.id = pl.skills_data_id
inner join teams as te on pl.team_id = te.id and te.name <> 'Devify'
inner join towns as to on pl.team_id = to.id
group by to.id, to.name
order by max_speed desc, town_name;
推荐阅读
- javascript - Vue3:使用 TypeScript 时无法从另一个计算道具访问计算道具
- java - 用 Java 打印骰子组合
- php - 在 PHP 数组中添加变量并识别和交换变量
- ruby - 使用 --install-dir 安装时找不到本地 gem
- clojurescript - Windows wsl2 热代码重载上带有 Shadow-cljs 浏览器设置的 Emacs Cider
- python - 无法将“\”替换为“/”
- flutter - 如何测量颤振性能和渲染时间
- haskell - Haskell函数递归删除列表中给定值的所有出现
- php - PHP - 读取 CSV 文件并将列连接到分隔行并输出到新文件中
- reactjs - 如何通过在反应多选中选择一个选项来替换 Select ...?