我是ORACLE MERGE Command的新手。
我打算根据源表数据在目标表中插入一行。 源表具有与目标表的外键关系。源表中的Column1和Column2必须存在,以允许目标表中具有这些值的行。
我的合并查询如下。
MERGE into TARGET_TABLE target
USING (
Select column1, column2 from SOURCE_TABLE where column3='somevalue'
) source
ON (
source.column1 is null or target.column4='anotherValue'
)
WHEN NOT MATCHED THEN INSERT (
target.column1,
target.column2,
target.column3,
target.column4
) VALUES (
source.column1,
source.column2,
'somevalue3',
'anotherValue'
)
仅当发现有source.column1存在于'somevalue'的source.column3值(即不为null和
)时,才插入一行。目标表中没有行,其第一列,第二列和第四列分别具有以下值
即使我在“ ON”子句中的MATCH条件不包括它们,我也需要解释为什么它与上面的Point1和Point2匹配。
我对此进行编码时,由于目标表中的许多列中column4的值都不为anotherValue,因此我希望多行不能匹配该条件。
尝试建立1号
表1(源)
COL1 COL2 COL3
a1 a2 a3
表2(目标)
COL1 COL2 COL3 COL4
无行
期望的行为:
在表2中插入一行
如果源表中有一行,其中COL3 ='a3'和
如果目标中没有行,且col1 = a1且col2 = a2且col4 = b4
要插入到目标表中的数据是:col1 = a1,col2 = a2和col4 = b4
观察到的行为
符合期望的行为,令我感到惊讶。我想知道我需要像这样的在线条款
ON (
source.column1 is null or source.column1 != target.column1 or source.column2 != target.column2 or target.column4 = 'anotherValue'
)
基于DEMorgan的定律:
NOT(A和B)= NOT A或NOT B;
NOT(A或B)= NOT A和NOT B