我需要获得一个包含一个查询的行列表,其中一列包含多个值,我不知道这一点。
我有三张桌子记录邮件给人们。一个表包含一个人的所有联系人数据,例如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 |
这可能吗?
答案 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