我有两个已存档的表。对于单个日期,它们具有相同的行,且数据很少。我需要将表2记录插入表1中。当我这样做时,我将得到唯一约束被忽略的错误。如何实现。是否有任何提示可以忽略已经存在的数据而仅插入新记录。
您可以使用此: INSERT INTO destTable
SELECT Field1,Field2,Field3,...
FROM srcTable
WHERE NOT EXISTS(SELECT *
FROM destTable
WHERE (srcTable.Field1=destTable.Field1 and
SrcTable.Field2=DestTable.Field2...etc.)
)
您可以使用SET
运算符MINUS
达到以下结果:
INSERT INTO TABLE1 (<COLUMN NAMES>)
SELECT <COLUMN NAMES> FROM TABLE2
MINUS
SELECT <COLUMN NAMES> FROM TABLE1
根据MINUS
对oracle documentation运算符的描述是
第一个查询而不是第二个查询选择的所有不同行
干杯!
另一种可能的解决方案是使用MERGE
,在下面的link上您可以找到有用的教程,对其进行了详细说明。
MERGE INTO table1 a
USING table2 b ON (a.col1 = b.col1) -- define your own search condition
WHEN NOT MATCHED THEN
INSERT (a.col1, a.col2, a.col3 ...)
VALUES (b.col1, b.col2, b.col3 ...);