我有桌子
Products(color_keyword,color)
我的目标是:
当我做的时候
SELECT *
FROM Products
使用相同的 color_keyword 添加到每个产品颜色列表(甚至可以用逗号分隔)。
数据库工具可以用某种方式吗?
如果没有,也许可以重新组织数据库/表来实现这个结果。
我知道我可以通过预测node.js中返回的每个产品来做这件事,并使用WHERE color_keyword=current_product_color_keyword
为每个产品选择请求做出准备,但我正在寻找更优雅的解决方案。
感谢。
答案 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 ...