【发布时间】: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
我想对此进行扩展,现在还可以从 shop 和 category 表中选择更多列。我想将s.s_name 和c.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