mysql - 如果几乎一个内部连接条件没有值,如何返回 null?
问题描述
我有一个名为的表league_ranking
,其中包含一个特定round
于teams
一个competition
. 现在发生 somerounds
在表中没有任何值league_ranking
,所以在这种情况下,我想防止在出现的列表中competitions
出现competition
几乎round
没有值的league_ranking
.
这是我的查询:
SELECT c.name AS competition_name,
c.id AS competition_id
FROM competition c
INNER JOIN competition_seasons s ON s.competition_id = c.id
INNER JOIN competition_rounds r ON r.season_id = s.id
INNER JOIN league_ranking l ON l.round_id = r.id
WHERE c.country_id = :country_id
GROUP BY c.id
ORDER BY c.name ASC
数据示例和表结构
联赛排名
|position | team_id | round_id |
1 120 5
2 124 5
比赛回合
| id | season_id | name
5 577 First Round
6 578 Preliminary Round
比赛季节
|id | competition_id
577 28
578 28
竞赛
|id | name
28 Premier
正如你所看到的round
6 里面没有值league_ranking
,问题是我的查询甚至返回了竞争Premier
,我怎样才能阻止返回competition
几乎round
没有值的这个?
谢谢。
解决方案
您可以尝试使用LEFT JOIN
代替INNER JOIN
,您需要Outer JOIN
基于competition_rounds
表。
SELECT c.name AS competition_name,
c.id AS competition_id
FROM competition_rounds r
LEFT JOIN competition_seasons s ON r.season_id = s.id
LEFT JOIN competition c ON s.competition_id = c.id
LEFT JOIN league_ranking l ON l.round_id = r.id
WHERE c.country_id = :country_id
GROUP BY c.id
ORDER BY c.name ASC
推荐阅读
- javascript - 在动态插入的输入上设置 jquery 掩码?
- android - 更新到版本 4.10 后 Android Gradle 同步失败
- php - 无法在最新的 Ubuntu“18.04.2 LTS (Bionic Beaver)”上安装 php7.2-fpm
- angularjs - 如果刷新(JWT)令牌未经授权(401响应),AngularJS重定向到登录
- android - ContributesAndroidInjector 不注入模块
- python - 使用python比较两个大文件的模糊字符串匹配
- python - 如何迭代应用条件的字符串?
- python - 将整数列表拆分为给定 0 作为分隔符的子列表
- python - 重新索引 Pandas Dataframe - python
- css - CSS | 背景样式 - 固定在移动设备中不起作用