1

这是我的表结构:

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. 工作

首先将由该顺序决定。

4

1 回答 1

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
于 2012-12-21T16:46:18.227 回答