数据库: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));
突出显示的部分似乎是错误的,因此数据没有恢复。
请帮忙
答案 0 :(得分:0)
尝试使用它。
p.productnummer IN (SELECT MAX(productnummer) FROM product
GROUP BY (CONCAT(SUBSTR(productnummer,1,4),SUBSTR(productnummer,8,4))))