【问题标题】:Turn MySQL key pair into concatenated list将 MySQL 密钥对转换为连接列表
【发布时间】:2013-09-12 14:27:29
【问题描述】:

我有 3 张桌子:

businesses ( id, name )
categories ( id, name )
business_categories ( business_id, category_id )

第三张桌子是多对多的,那对有一个PRIMARY KEY

我正在尝试创建一个类似于以下内容的视图:

business_name    category_names
Pizza Hut        Restaurants, Pizza, Fast Food
Chipotle         Restaurants, Mexican, Fast Food

这是我正在尝试的

SELECT `businesses`.`name`, CONCAT_WS( ',', (
    SELECT `name`
    FROM `categories`
    JOIN `business_categories`
        ON `categories`.`id` = `business_categories`.`category_id`
    WHERE `business_categories`.`business_id` = `businesses`.`id`
) ) 
FROM  `businesses` 
ORDER BY  `businesses`.`id` ASC 

但我收到此错误:

Subquery returns more than 1 row

【问题讨论】:

    标签: mysql join view subquery concat-ws


    【解决方案1】:

    您可以使用GROUP_CONCAT() 函数来实现:

    SELECT
      businesses.name,
      GROUP_CONCAT(categories.name) AS all_categories
    FROM
      businesses
        LEFT JOIN business_categories
          ON businesses.id=business_categories.business_id
        LEFT JOIN categories
          ON business_categories.category_id=categories.id
    GROUP BY
      businessess.name
    

    【讨论】:

    • 谢谢,GROUP_CONCAT 正是我想要的。我最终使用了GROUP_CONCAT( categories.name SEPARATOR ', ' )
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2019-11-12
    • 2012-08-01
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多