0

我需要使用一个查询获取行列表,其中一列由多个值组成,我无法弄清楚。

我有三个表记录给人们的邮件。一个表包含一个人的所有联系数据,例如名字、姓氏、地址等。第二个表包含具有唯一 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 |

这可能吗?

4

1 回答 1

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
于 2013-09-27T20:12:19.713 回答