代码之家  ›  专栏  ›  技术社区  ›  Enthu

SQL查询-根据指定的值多次复制数据

  •  1
  • Enthu  · 技术社区  · 8 年前

    我正在尝试复制“product”表中的数据,并在“carrier”列中添加新值。

    例子: 在“product”表中,我有一个产品列表,我需要将其与另一个表“carrier”一起分配。“承运人”表中目前有5家承运人。

    在“product\u carrier”表中,我想在此处创建新条目。产品“样品-1”分配给载体1、2、3和4。产品“样品-2”分配给承运人5。

    因此,它成为:

    样本-1 | 1

    样本-1 | 2

    样本-1 | 3

    样本-1 | 4

    样本-2 | 5

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

    我的桌子是-

    ps\U产品:id\U产品

    ps\U承运商:id\U承运商

    ps\u product\u carrier:id\u product,id\u carrier\u reference

    我的直觉是,我需要更新2组数据组。首先,将产品设置为carrier(1、2、3、4),并将另一组产品分配给carrier(5)。我将运行两组查询来实现这一点。

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

    我不知道这是否可行,如果您有任何建议,我将不胜感激。

    非常感谢。

    2 回复  |  直到 8 年前
        1
  •  1
  •   ScaisEdge    8 年前

    假设在将所有要分配给承运商的产品分配给承运商时,有一个名为table\u with\u product\u list(或list)的表

    可以使用插入选择

    eg用于多载波(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
    
        2
  •  0
  •   Thorsten Kettner    8 年前

    由于数据库中没有任何信息表明产品应与载体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);