mysql 变体到来自 sql 查询的列
Posted
技术标签:
【中文标题】mysql 变体到来自 sql 查询的列【英文标题】:mysql variants to columns from sql query 【发布时间】:2020-11-22 17:54:48 【问题描述】:我有一个 mysql 表,它具有简化目的 sku,并且该 sku 有一组未知的属性值
skus
------
id, sku, qty
1, abc, 10
2, bvcc, 20
variantvalues
-------------
id, sku_id, variant_id, value
1, 1, 1, red
1, 1, 2, medium
variants
--------
id, name
1, color
2, size
.....
EXPECTED RESULT
id, sku, color, size, qty
-------------------------
1, abc, red, medium, 10
我面临的挑战是,我是否可以进行查询,将数据作为 skus 列表提供给我,然后为它们的每个变体和变体值提供列...这样,如果我添加了新变体选项...比如说,性别,到变量表,它被归因于一个 sku,那么会有一个新列吗?
问题来源于这个问题:Modeling Product Variants
【问题讨论】:
请向我们展示您想要的结果。 当你评论时我一定是在添加它...见原始问题,代码部分结束。 刚找到这个,有帮助吗? ubiq.co/database-blog/transpose-rows-columns-dynamically-mysql我想你基本上是想创建一个 Excel 数据透视表,对吧? 【参考方案1】:您正在描述一个动态枢轴。基本上你需要动态生成查询字符串,使用sql查询,然后执行。
这是在 MySQL 中使用准备好的语句的一种方法:
set @sql = null;
select group_concat(distinct
'max(case when v.name = ''', name, ''' then vv.value end) as `', name, '`'
) into @sql
from variants;
set @sql = concat(
'select s.id, s.sku, ',
@sql,
' from skus s
inner join variantvalues vv on vv.sku_id = s.id
inner join variants v on v.id = vv.variant_id
group by s.id, s.sku'
);
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
【讨论】:
以上是关于mysql 变体到来自 sql 查询的列的主要内容,如果未能解决你的问题,请参考以下文章