如何在列表中为单个产品获取多个类别
如何在列表中为单个产品获取多个类别
我想要选择分类和产品,我有多个分类适用于同一产品,我试图以列表的方式显示,
我尝试使用子查询和连接,但是对于同一产品,我得到了重复的记录
我期望得到的结果是以逗号分隔的同一产品的所有分类都在一行中显示
我试图获取的数据应该如下所示:
-------------------------------------------------------------- 产品名称 分类 -------------------------------------------------------------- 女鞋 - 蓝色 鞋类, 太阳镜 女太阳镜 黄色 太阳镜, 时尚, 眼部保护
这是我的SQL Fiddle链接
在某些情况下,我们需要为单个产品在列表中获取多个类别。然而,使用传统的SQL查询语句时,我们只能获取一个类别。这就是出现问题的原因。
为了解决这个问题,我们可以使用GROUP_CONCAT函数(在MySQL中)或wm_concat函数(在Oracle 11g中)。这些函数可以将多个行合并为一个单独的字符串,并使用指定的分隔符进行分隔。
在MySQL中,我们可以使用以下查询语句来获取单个产品的多个类别:
SELECT
P.PRODUCT_NAME,
GROUP_CONCAT(C.CATEGORY_NAME separator ',')
FROM
PRODUCT_CATEGORY PC
LEFT JOIN PRODUCT P ON (P.PRODUCT_ID = PC.PRODUCT_ID)
LEFT JOIN CATEGORY C ON (C.CATEGORY_ID = PC.CATEGORY_ID)
GROUP BY
P.PRODUCT_NAME
ORDER BY
P.PRODUCT_NAME ASC
在Oracle 11g中,我们可以使用以下查询语句来获取单个产品的多个类别:
SELECT
P.PRODUCT_NAME,
wm_concat(C.CATEGORY_NAME)
FROM
PRODUCT_CATEGORY PC
LEFT JOIN PRODUCT P ON (P.PRODUCT_ID = PC.PRODUCT_ID)
LEFT JOIN CATEGORY C ON (C.CATEGORY_ID = PC.CATEGORY_ID)
GROUP BY
P.PRODUCT_NAME
ORDER BY
P.PRODUCT_NAME ASC
这些查询语句将返回一个包含产品名称和多个类别的结果集。多个类别将使用逗号作为分隔符进行分隔。这样,我们就可以在单个查询中获取产品的多个类别了。
总结起来,要在列表中获取单个产品的多个类别,我们可以使用GROUP_CONCAT函数(在MySQL中)或wm_concat函数(在Oracle 11g中)。这些函数可以将多个行合并为一个单独的字符串,并使用指定的分隔符进行分隔。这样,我们就可以在单个查询中获取产品的多个类别了。