2013-09-27 32 views
0

我需要獲得一個查詢行的列表,其中一個列包含多個值,我不知道這一點。在一個結果中有多個值的MySQL查詢

我有三個表記錄郵件給人。一個表具有諸如first_name,last_name,address等人的所有聯繫人數據。第二個表由郵件名稱列表及其唯一ID組成。像#1 - 郵件_1,#2郵寄_2等。第三張表通過日誌記錄郵件ID和人員ID聯繫這兩個。現在我需要獲得最後一列顯示每個人都得到的郵件列表的完整列表。

這是我曾嘗試:

SELECT p.fname, p.lname, p.address m.mailing_name FROM people p 
JOIN mailings_liaison l ON l.contact_id - p.id 
JOIN mailings m ON m.id = l.mailings_id 
WHERE 1 
ORDER by p.lname ASC 

我得到了我需要這一點,但如果一個人有兩個或多個郵件它顯示爲附加行。我需要團結那些行,以便每個人只有一個排在最後一欄列出了幾個郵件,也就是我得到的查詢結果:

| 1. | John | White | [email protected] | Mailing_1 | 
| 2. | John | White | [email protected] | Mailing_2 | 

但不知何故,而不是我想:

| 1. | Jhon | White | [email protected] | Mailing_1 Mailing_2 | 

這可能嗎?

回答

4

使用GROUP_CONCAT

SELECT p.fname, p.lname, p.address, 
     GROUP_CONCAT(m.mailing_name SEPARATOR ' ') 
FROM people p 
     JOIN mailings_liaison l ON l.contact_id - p.id 
     JOIN mailings m ON m.id = l.mailings_id 
GROUP BY p.fname, p.lname, p.address 
ORDER by p.lname ASC 
+1

你拼錯分離器 – RolandoMySQLDBA

+0

是的,這是完美的。謝謝。但我剛剛意識到它會搜索那些郵寄過的人,還有一種方法可以添加沒有任何郵件的人,即沒有郵件列表中的任何記錄的人? – user164863

+0

而不是使用'JOIN'(*或'INNER JOIN' *)將其改爲'LEFT JOIN'。 –

相關問題