【问题标题】:MySQL query with several values in one resultMySQL 查询在一个结果中有多个值
【发布时间】:2013-09-27 20:09:33
【问题描述】:

我需要通过一个查询获取行列表,其中一列包含多个值,但我无法弄清楚。

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

这可能吗?

【问题讨论】:

    标签: mysql sql select inner-join


    【解决方案1】:

    使用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
    

    【讨论】:

    • 你拼错SEPARATOR
    • 是的,这很完美。谢谢你。但我刚刚意识到它会搜索那些被邮寄的人,有没有办法也添加从未收到过任何邮件的人,即在 mailings_liaison 表中没有任何记录的人?
    • 而不是使用JOININNER JOIN)将其更改为LEFT JOIN
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多