MySQL查询在一个结果中包含多个值

时间:2013-09-27 20:09:33

标签: mysql sql select inner-join

我需要获得一个包含一个查询的行列表,其中一列包含多个值,我不知道这一点。

我有三张桌子记录邮件给人们。一个表包含一个人的所有联系人数据,例如first_name,last_name,address等。第二个表包含具有唯一ID的邮件名称列表。比如#1 - Mailing_1,#2 Mailing_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 | john@white.ru | Mailing_1 |
| 2. | John | White | john@white.ru | Mailing_2 |

但不知怎的,我想得到:

| 1. | Jhon | White | john@white.ru | Mailing_1 Mailing_2 |

这可能吗?

1 个答案:

答案 0 :(得分: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