如何获取具有相同列值的项目

时间:2018-05-14 21:30:46

标签: mysql database

我有桌子

Products(color_keyword,color)

我的目标是:

当我做的时候

SELECT * 
  FROM Products

使用相同的 color_keyword 添加到每个产品颜色列表(甚至可以用逗号分隔)。

数据库工具可以用某种方式吗?

如果没有,也许可以重新组织数据库/表来实现这个结果。

我知道我可以通过预测node.js中返回的每个产品来做这件事,并使用WHERE color_keyword=current_product_color_keyword为每个产品选择请求做出准备,但我正在寻找更优雅的解决方案。

感谢。

1 个答案:

答案 0 :(得分:1)

我们可以使用相关的子查询,但要小心大集。相关子查询将针对外部查询返回的每一行执行,因此我们希望确保合适的索引可用。在性能方面,这种方法也有可能吃午餐和午餐盒。

 SELECT p.id
      , p.color_keyword
      , p.color
      , ( SELECT GROUP_CONCAT(DISTINCT q.color ORDER BY q.color)
            FROM products q
           WHERE q.color_keyword <=> p.color_keyword
        ) AS color_list 
   FROM products p 
 WHERE ...   

另一种方法是使用联接到内联视图

 SELECT p.id
      , p.color_keyword
      , p.color
      , q.color_list
   FROM products p 
   LEFT
   JOIN ( SELECT r.color_keyword 
               , GROUP_CONCAT(DISTINCT r.color ORDER BY r.color) AS color_list
           FROM products r
          GROUP BY r.color_keyword
        ) q
     ON q.color_keyword <=> p.color_keyword  
 WHERE ...