mysql - 左连接,每个左条目只有 1 行

标签 mysql sql join left-join

这是我的表结构:

persons
-------
id
first_name
last_name


phone_numbers
-------------
id
person_id
number
type

这是我的查询:

SELECT `persons`.`id`, `first_name`, `last_name`, `number`
FROM `persons`
LEFT JOIN `phone_numbers` ON `persons`.`id` = `phone_numbers`.`person_id`
ORDER BY `last_name` ASC

这会返回所有人,无论他们是否有电话号码。好。


当一个人拥有多个电话号码时,问题就开始了;我得到同一个人的多行。

我如何确保每个人只能得到 1 行(有第一个电话号码,或者根本没有——如果没有的话)?


更新:我忘记包括我有一个 type 列这一事实。它的值可以是三个选择之一:

  1. 手机
  2. 工作
  3. 首页

首先将由该顺序确定。

最佳答案

SELECT * FROM phone_numbers NATURAL JOIN (
  SELECT   person_id,
           ELT(
             MIN(FIELD(type, 'Cell', 'Work', 'Home')),
             'Cell', 'Work', 'Home'
           ) AS type
  FROM     phone_numbers
  GROUP BY person_id
) t JOIN persons ON persons.id = phone_numbers.person_id

关于mysql - 左连接,每个左条目只有 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13993777/

相关文章:

mysql - 查找对另一列中的值进行迭代的最大计数

Mysql:一个表的一个字段和另一个表的两个字段之间的多重关系

mySQL - 使用三个表中的数据和列创建新表

php - 是否可以检索具有特定 ID 的每一条记录?

php - 此代码对 SQL 注入(inject)安全吗

android - 检查 SQL 查询是否在 Android SQLite 上成功

SQL:JOIN 语法变体

mysql - 同时选择和更新

mysql - 动态更改最大同时连接数?

sql - Snowflake 中有等效的 jsonb_array_elements 吗?