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 人あたり 1 行しか取得できないようにするにはどうすればよいですか (最初の電話番号がある場合、またはまったくない場合)。


更新:type列があるという事実を含めるのを忘れていました。その値は、次の 3 つの選択肢のいずれかになります。

  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 に答える