SQL查询 - 根据分配的值多次复制数据

时间:2018-01-29 08:30:50

标签: mysql

我正在尝试从“产品”表复制/复制数据,并在“运营商”列中添加新值。

实施例: 在“产品”表中,我有一个产品列表,我将需要与另一个表“载体”分配。 “运营商”表中目前有5家运营商。

在“product_carrier”表中,我想在此处创建新条目。产品“sample-1”被分配给载体1,2,3和4.产品“sample-2”被分配给载体5.

因此,它变成了这样:

sample-1 | 1

sample-1 | 2

sample-1 | 3

sample-1 | 4

样本-2 | 5

这是我目前用于分配运营商的电子商务系统的数据库结构。

我的表是 -

ps_product:id_product

ps_carrier:id_carrier

ps_product_carrier:id_product,id_carrier_reference

我的预感是,我需要更新2组数据组。首先,产品设置为载体(1,2,3,4),另一组产品分配给载体(5)。我将运行2组查询来实现此目的。

我不知道如何执行产品的副本并为不同的运营商创建插入多个值。目前,我有数千种产品需要相应分配。

我不知道这是否可能,如果您有任何建议,我们将非常感激。

谢谢。

2 个答案:

答案 0 :(得分:1)

当您指定要分配给承运人的所有产品时,假设您有一个名为table_with_product_list(或列表)的表

您可以使用插入选择

例如对于多载波(1,2,3,4)

insert into ps_product_reference (id_product, id_carrier_reference)
select table_with_product_list.product_id, t.id_carrier
from table_with_product_list
cross join (
    select id_carrier from ps_carrier
    where id_carrier in  ( 1,2,3,4)

)  t

单载波(5)

insert into ps_product_reference (id_product, id_carrier_reference)
select table_with_product_list.product_id ,  5
from table_with_product_list

答案 1 :(得分:0)

由于数据库中没有任何内容表明产品是否应与运营商1至4或运营商5合并,因此您必须自行说明。在我看来,没有任何内容可以反对两个单独的INSERT陈述。您可以使用文本编辑器或Excel或您自己编写的程序来构建VALUES子句:

insert into ps_product_carrier (id_product, id_carrier_reference)
values 
  (1111, 1),
  (1111, 2),
  (1111, 3),
  (1111, 4),
  (3333, 1),
  (3333, 2),
  (3333, 3),
  (2222, 4),
  ... ;

commit;

insert into ps_product_carrier (id_product, id_carrier_reference)
values 
  (2222, 5),
  (4444, 5),
  ... ;

commit;

或者从上面的第二个语句开始,然后使用:

而不是第一个查询
insert into ps_product_carrier (id_product, id_carrier_reference)
select p.id_product, c.id_carrier
from ps_product p
cross join (select id_carrier from ps_carrier where id_carrier in (1,2,3,4)) c
where p.id_product not in 
  (select id_product from ps_product_carrier where id_carrier_reference = 5);