2016-09-29 50 views
0

我有一个MERGEsubquery获取和ID,我想知道subquery in the NOT MATCHED statement总是执行或不。Oracle - 合并子查询减少

 MERGE INTO CAR_STOCK st 
     USING CAR_PRODUCTO pro 
     ON (pro.id = st.producto_id AND pro.ean = ?) 
     WHEN MATCHED THEN 
     UPDATE SET st.stockActual = ? 
     WHEN NOT MATCHED THEN 
     INSERT (stockActual, local_id, producto_id, activo) 
     VALUES (?, ?, (SELECT id FROM car_producto WHERE ean = ?), 'S'); 

谢谢!

编辑:?是因为我在PreparedStatement使用JDBC

+0

不匹配时,将执行。这里有什么疑问。当你提到的加入满足时,你明确地否定了需要完成的活动。 – XING

回答

1

无需子查询,你可以简单地指pro.idinsert一部分,就像这里:

merge into t1 using t2 on (t1.a = t2.a) 
    when matched then update set t1.b = t2.b 
    when not matched then insert (a, b) 
    values (0, t2.b) 

测试数据和merge结果:

create table t1 as (select 1 a, 'a01' b from dual); 
create table t2 as (select 1 a, 'a05' b from dual union all select 2 a, 'bxx' b from dual); 

    A B 
------ --- 
    1 a05 
    0 bxx