使用select语句将数据从一个表插入另一个表,并避免重复数据

时间:2013-12-02 04:25:20

标签: sql oracle plsql

数据库:Oracle

我想将表1中的数据插入到表2中,但是表2的主键是表1的主键的前4个字母和后4个数字的组合。

例如:

  

表1 - 主键:abcd12349887 / abcd22339887 / abcder019987

在这种情况下,即使表1的主键不同,但是当我提取第1个4个和最后4个字符时,输出也是相同的abcd9887

因此,当我使用select来插入数据时,我在表2中得到了重复PK的错误。

我想要的是如果PK的数据已经存在,那么就不要添加该记录。

这是我完整的存储过程:

 INSERT INTO CPIPRODUCTFAMILIE
 (productfamilieid, rapport, mesh, mesh_uitbreiding, productlabelid)
 (SELECT DISTINCT            (CONCAT(SUBSTR(p.productnummer,1,4),SUBSTR(p.productnummer,8,4)))      
                 productnummer, 
   ps.rapport, ps.mesh, ps.mesh_uitbreiding, ps.productlabelid 
  FROM productspecificatie ps, productgroep pg, 
   product p left join cpiproductfamilie cpf
    on (CONCAT(SUBSTR(p.productnummer,1,4),SUBSTR(p.productnummer,8,4))) =                            cpf.productfamilieid
  WHERE p.productnummer = ps.productnummer
  AND p.productgroepid = pg.productgroepid
    AND cpf.productfamilieid IS NULL
   AND pg.productietype = 'P'

   **AND p.ROWID IN (SELECT MAX(ROWID) FROM product
   GROUP BY (CONCAT(SUBSTR(productnummer,1,4),SUBSTR(productnummer,8,4))))**

   AND (CONCAT(SUBSTR(p.productnummer,1,2),SUBSTR(p.productnummer,8,4))) not in 
   (select productfamilieid from cpiproductfamilie));

突出显示的部分似乎是错误的,因此数据没有恢复。

请帮忙

1 个答案:

答案 0 :(得分:0)

尝试使用它。

p.productnummer IN (SELECT MAX(productnummer) FROM product
    GROUP BY (CONCAT(SUBSTR(productnummer,1,4),SUBSTR(productnummer,8,4))))