省略重复字段,但不删除mysql结果集中的行

时间:2014-04-16 02:38:20

标签: mysql sql resultset

我应该如何更改以下MySql查询...

select o.name, e.name, c.phone from organization o, employee e, contact c

产生这个......

Organization  | Employee   | Contact Number
--------------+-------------+-----------------
Acme Cement   | John Doe   | 555-1234
Acme Cement   | Jane Plain | 555-1212
Acme Cement   | Bob knob   | 555-1111
Hack IT       | Mike Smith | 444-2343
Hack IT       | Ed Snowdon | 444-4444

这样它就会返回......

Organization  | Employee   | Contact Number
--------------+-------------+-----------------
Acme Cement   | John Doe   | 555-1234
              | Jane Plain | 555-1212
              | Bob knob   | 555-1111
Hack IT       | Mike Smith | 444-2343
              | Ed Snowdon | 444-4444

1 个答案:

答案 0 :(得分:0)

您无法使用MySQL实现所需的结果集。查询结果将始终在行中包含o.name。

但是,如果您使用GROUP BY和GROUP_CONCAT函数,那么您可以更容易地处理结果:

SELECT o.name, GROUP_CONCAT(e.name), GROUP_CONCAT(c.phone)
FROM organization o
LEFT JOIN employee e ON e.orgid = o.id
LEFT JOIN contact c ON c.empid = e.id
GROUP BY o.name

您的结果将是:

| Organization | Employee                       | Contact Number             |
|--------------+--------------------------------+----------------------------|
| Acme Cement  | John Doe,Jane Plain,Bob knob   | 555-1234,555-1212,555-1111 |
| Hack IT      | Mike Smith,Ed Snowdon          | 444-2343,444-4444          |

现在,不是为连续行隐藏o.name的结果,而是每个组织有一行,其他列是相关数据的逗号列表。如果您愿意,该函数允许您使用逗号以外的分隔符。