这是我的表结构:
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
列这一事实。它的值可以是三个选择之一:
- 手机
- 工作
- 首页
首先将由该顺序确定。
最佳答案
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/