【问题标题】:MySQL Select many columns when using GROUP_CONCATMySQL 使用 GROUP_CONCAT 时选择多列
【发布时间】:2016-08-29 11:34:12
【问题描述】:

我收到了this great answer,关于如何从我的 3 个数据库表中选择不同的行:

select p.p_id, p.`p_name`, p.brand, GROUP_CONCAT(DISTINCT c.c_id SEPARATOR ', ') as categories, GROUP_CONCAT(DISTINCT s.s_id SEPARATOR ', ') as shops
from product p inner join product_category c on p.p_id = c.p_id
               inner join product_shop s on p.p_id = s.p_id
where c.c_id in (2,8)
  and s.s_id in (1,2)
group by p.p_id, p.`p_name`, p.brand

我想对此进行扩展,现在还可以从 shopcategory 表中选择更多列。我想将s.s_namec.c_name 添加到选择结果中。我该怎么做?我正在尝试来自this answer 的 CONCAT,例如:

GROUP_CONCAT(
  DISTINCT CONCAT(tags.id,',',tags.displayName) 
  ORDER BY posts.id 
  SEPARATOR ';'
)

因此,将其添加到我的查询中,只需像这样添加 category.c_name:

select p.p_id, p.`p_name`, p.brand, GROUP_CONCAT(DISTINCT CONCAT(category.c_id, category.c_name) SEPARATOR ', ') as categories, GROUP_CONCAT(DISTINCT s.s_id SEPARATOR ', ') as shops
from product p inner join product_category c on p.p_id = c.p_id
               inner join product_shop s on p.p_id = s.p_id
where c.c_id in (2,8)
  and s.s_id in (1,2)
group by p.p_id, p.`p_name`, p.brand

但由于某种原因导致此错误:

1054 - “字段列表”中的未知列“category.c_id”

如何正确地将更多列从类别和商店表中添加到我的选择查询中?

【问题讨论】:

  • category 表不在连接子句中您的意思是 product_category 吗?如果是这样,那么CONCAT(c.c_id, c.c_name) 应该可以完成这项工作。
  • 如果表不在查询中,那么它的列也不存在
  • 我看到了 categories 的别名,而不是 category。您是否尝试将category 替换为categories
  • 顺便说一下(或者可能不是),之后你会如何处理这个查询?
  • @Strawberry 我现在可以看到我需要在 sql 查询中包含类别和商店表。我将展示产品及其类别以及拥有它们的商店。

标签: mysql group-concat


【解决方案1】:

我必须使用inner joinshopcategory 表添加到查询中。完整的sql语句为:

SELECT p.p_id, p.`p_name`, p.brand, 
GROUP_CONCAT(DISTINCT CONCAT(c.c_id,':',c.c_name) SEPARATOR ', ') as categories, 
GROUP_CONCAT(DISTINCT CONCAT(s.s_id,':',s.s_name) SEPARATOR ', ') as shops
FROM product p 
INNER JOIN product_category pc on p.p_id = pc.p_id
INNER JOIN category c ON c.c_id = pc.c_id
INNER JOIN product_shop ps on p.p_id = ps.p_id
INNER JOIN shop s ON s.s_id = ps.s_id
WHERE c.c_id in (2,8)
AND s.s_id in (1,2)
GROUP BY p.p_id, p.`p_name`, p.brand

【讨论】:

    猜你喜欢
    • 2019-05-29
    • 1970-01-01
    • 2011-12-31
    • 2013-09-21
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    相关资源
    最近更新 更多