左连接,每个左边只有一行

时间:2012-12-21 16:31:21

标签: 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个电话号码时,问题就开始了;我为同一个人获得了多行。

我怎样才能确保每人只获得1排(使用第一个电话号码,或者根本不存在 - 如果没有)?


更新:我忘了列出我有一个type列的事实。它的价值可以是三种选择之一:

  1. 细胞
  2. 工作
  3. 主页
  4. 首先由该命令决定。

1 个答案:

答案 0 :(得分:4)

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