gpt4 book ai didi

mysql - 从联接中选择值并替换空单元格

转载 作者:行者123 更新时间:2023-11-29 06:29:44 24 4
gpt4 key购买 nike

我必须使用以下关系创建一个选择查询:

  • 人员(member_id、first_name、last_name、email、boolean grad_p)
  • 团队 (team_id, boolean grad_p, int max_size, team_name,team_captain)
  • 成员 (member_id, team_id, captain_p, ...)

我需要找到每支球队队长的姓名,如果没有队长,我需要显示“无队长”。战地队长p和member_id是同一个数据。不幸的是,member_id 是一个主键,所以我不相信我可以加入他们。 bool grad_p 如果有队长则为 0,如果没有则为 1。如果 teams 表中没有队长,则 team_captain 元组的数据为“null”。

我已经为此工作了一段时间,但谷歌搜索没有帮助我找到解决方案。

最佳答案

您可以为此使用外部联接。外连接将返回一个表的所有行,而不管它在另一个表中是否有任何对应的匹配项。换句话说,如果我在 team_captainmember_id 列上加入“teams”和“personnel”,即使成员为空,我也会得到所有团队。例如,假设人员看起来像这样:

| member_id | name |
+-----------+------+
| 1 | John |
| 2 | Jane |
| 3 | Jack |

团队看起来像这样:

| team_id | team_captain |
+---------+--------------+
| 1 | 1 |
| 2 | null |
| 3 | 3 |

我可以像这样执行外部连接来获取队长的名字:

SELECT t.team_id, p.name
FROM teams t
LEFT JOIN personnel p ON p.member_id = t.team_captain;

我会得到名字,如果不存在,我会得到一个空字段:

| team_id | name |
+---------+------+
| 1 | John |
| 2 | null |
| 3 | Jack |

这里是关于 outer joins 的更多信息.现在,MySQL 提供的一个奇特的函数是 COALESCE。 .这是一个返回第一个非空参数的函数。您可以使用它用“No Captain”替换那些空字段:

SELECT t.team_id, COALESCE(p.name, 'No Captain') AS captain
FROM teams t
LEFT JOIN personnel p ON p.member_id = t.team_captain;

这是一个 SQL Fiddle以我的表格为例。

关于mysql - 从联接中选择值并替换空单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28650355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com