繁体   English   中英

根据另一个表/列中的值插入一个表/列中的值

[英]Insert value from one table/column based on value from another table/column

我正在尝试导入 csv,取消透视数据和 INSERT INTO product_attribute表。

我有一个名为attributes的表

属性ID 属性名 属性值
1 颜色 黑色的
2 颜色 绿色
3 颜色 蓝色的
4 尺寸 小的
5 尺寸 中等的
6 尺寸 大的

我有一张名为products的表

product_id 库存单位 数量
1 测试3 13
2 测试2 17
3 测试1 5

我有一个名为product_attribute的表,它链接在上面的两个表之间。

product_id 属性ID

csv 数据如下导入到名为import的临时文件夹中。

库存单位 颜色 尺寸
测试1 黑色的 小的
测试2 绿色 大的
测试3 蓝色的 中等的

到目前为止,我已经设法使用以下查询取消透视 csv/表

SELECT sku, 'colour' attribute_name, colour attribute_value
FROM import
UNION ALL
SELECT sku, 'size' attribute_name, size attribute_value
FROM import
UNION ALL

然后数据看起来像这样

库存单位 属性名 属性值
测试1 颜色 黑色的
测试2 颜色 绿色
测试3 颜色 蓝色的
测试1 尺寸 小的
测试2 尺寸 大的
测试3 尺寸 中等的

我需要以某种方式使用 unpivot 查询添加 INSERT INTO 查询,因此product_attribute表如下所示

product_id 属性ID
3 1
2 2
1 3
3 4
2 6
1 5

我相信子查询可以帮助我实现这一目标,但是当值基于另一列时,我不确定如何将其组合在一起。

任何帮助都非常感谢thankyou。

在子查询中使用您的代码并使用公共列将其连接到两个表。

INSERT INTO product_attribute(product_id, attribute_id)
    SELECT p.product_id, a.attribute_id
    FROM (
        SELECT sku, 'colour' attribute_name, colour attribute_value
        FROM import
        UNION ALL
        SELECT sku, 'size' attribute_name, size attribute_value
        FROM import
        UNION ALL
    ) as u
    JOIN products p   USING(sku)
    JOIN attributes a USING(attribute_name, attribute_value)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM