MYSQL 根据唯一性将一些值移动到新列

MYSQL move some values to new column depending on uniqueness

我有一个产品列表,产品选项(例如尺寸)和选项值(例如 S/M/L/XL)都存储在一个 table 中,如下图所示:

当一个产品只有一个选项集(例如尺码)时,这很好用。正如您将看到的产品 ID 53 有两种类型的选项,尺寸 (option_id 11) 和颜色 (option_id 13)。

在数据库中,我还有最多可以有三种类型选项的产品,我正在尝试编写一个脚本来适应这些差异,因为我正在尝试将我的在线商店迁移到另一个系统对他们接收产品数据的格式非常具体。

我正在努力找出解决这个问题的正确方法,并以将第二和第三 options/value 集移动到适当的第二和第三列的方式编写 UPDATE 语句(option_2_name、option_2_value_name 和 option_3_name、option_3_value_name,如果每个产品当然存在的话)。

为了视觉上的帮助,这是另一张图片,它显示了我想要(在本例中)尺寸 options/value 产品 53 移动到的位置:

你能帮我指明正确的方向吗?

好吧,就像我说的,它不是一个正常的 table 结构,所以对它的操作会很奇怪,我仍然质疑这种方法。但是这里有一些你可以用来移动到第 2 列的东西:

update table_name t1
set option_2_name = option_1_name, option_2_value=option_1_value,
    option_1_name=NULL, option_1_value=NULL
where 
(select count(distinct option_id) 
   from table_name t2 
  where t1.product_id = t2.product_id 
    and t1.option_id > t2.option_id) = 1

第 3 列:

update table_name t1
set option_3_name = option_1_name, option_3_value=option_1_value,
    option_1_name=NULL, option_1_value=NULL
where 
(select count(distinct option_id) 
   from table_name t2 
  where t1.product_id = t2.product_id 
    and t1.option_id > t2.option_id) = 2

以此类推,您将需要更多。

这将使更高的选项 ID 进一步移动。我没有测试它,但它应该 运行 没问题。