mysql - 更改 mysql 查询以组合多列而不是单独的行

标签 mysql sql select group-by group-concat

我有 2 个这样的表:

Table: Company
id| Name         | Area
1 | Company A    | New York
2 | Company B    | New York
3 | Company C    | Chicago

Table: Service
id| Type
1 | Service
1 | Delivery
2 | Hotel
2 | Restaurants
3 | Movers

我想像这样获得纽约的结果(不包括芝加哥):

Name      | Area    | Type
Company A | New York| Service, Delivery
Company B | New York| Hotel, Restaurants

但我反而得到了这个:

Name      | Area     | type
Company A | New York | Service
Company A | New York | Delivery
Company B | New York | Hotel
Company B | New York | Restaurants

我曾尝试使用 distinct 和 concat 来解决我的问题,但查询并没有结束,而是在运行超过 6 秒后超时。如果我运行一个查询来获得我现在得到的结果,我会在不到 1 秒的时间内得到结果。

以下是我到目前为止尝试过的查询:

select p1.Name,
GROUP_CONCAT(p2.Type) from company as p1, service as p2
GROUP BY p1.CompanyName
LIMIT 10;

结果:超时

select DISTINCT company.Name from company
LEFT JOIN service
ON company.Number = service.Number AND service.Type LIKE '% York'
Limit 50;

结果:永无止境(甚至没有超时)

select p1.Name, p2.type from company as p1, service as p2
where p1.id = p2.id
LIMIT 10;

结果: 显示真正困惑的结果,这是不可能的:

Name      | Type
Company A | Hotel
Company B | Delivery
Company B | Restaurants

数据库最初是 Microsoft Access,我在那里得到了这样的结果,不熟悉 Microsoft Access 我认为 Microsoft 一定有问题并试图在 mysql 中执行查询,但同样的问题发生在那里......如果我尝试手动统计显示的数据根本不统计,这让我真的很困惑......有人可以调查我的查询并告诉我我做错了什么吗? 谢谢!

最佳答案

使用 inner join 获取匹配的记录并按公司 ID 分组结果。

这里是查询:

 select c.name,c.area,group_concat(s.Type) as type 
 from Company c inner join service s on c.id=s.id
 where c.area='New York'
 group by s.id;

关于mysql - 更改 mysql 查询以组合多列而不是单独的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32285783/

相关文章:

php - 使用新值更新联结表

php - 在 PHP 中打印 MySQL 查询

sql-server-2008 - 在 SELECT 语句中设置变量

mysql - 对数字范围 mysql 执行计算

mysql - SQL/Hive 表别名

php - Mysql在具有不同唯一id的表之间传输数据?

php - 如何将日期时间对象与日期对象进行比较

结合 COUNT、MAX 和 SUM 的 MySQL

c# - Entity Framework 数据库首先是多对多

mysql - 将平均评分加入到 MySQL 选择的所有行的末尾