我正在尝试从“产品”表复制/复制数据,并在“运营商”列中添加新值。
实施例: 在“产品”表中,我有一个产品列表,我将需要与另一个表“载体”分配。 “运营商”表中目前有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组查询来实现此目的。
我不知道如何执行产品的副本并为不同的运营商创建插入多个值。目前,我有数千种产品需要相应分配。
我不知道这是否可能,如果您有任何建议,我们将非常感激。
谢谢。
答案 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);