2012-12-21 30 views
2

這裏是我的表結構:左加入,每離開入口僅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列。它的值可以是以下三種選擇之一:

  1. 細胞
  2. 工作
  3. 首頁

首先會通過次序而定。

+1

哪個是「*第一個電話號碼*」? – eggyal

+0

@eggyal - 我怎麼能忘記?我更新了我的問題。 – MegaHit

+0

@MegaHit'type'是一個數字'1,2,3'或者說是'Cell,Work,Home'? – fthiella

回答

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 
+0

謝謝。用'ELT'和'FIELD'就好玩! – MegaHit