德比中的条件陈述

时间:2010-02-23 10:20:11

标签: database derby

看起来derby不支持条件语句[IF]。我们怎么写

if exists (select 1 from customers where name='somename') 
    update customers ...
else 
    insert into customers ...
在德比中? Derby也没有“替换”mysql。

注意:我使用derby作为mysql的单元测试替代品[即生产将使用mysql,unit-test将使用derby]。

2 个答案:

答案 0 :(得分:2)

http://db.apache.org/derby/docs/10.2/ref/rrefcasenullif.html#rrefcasenullif怎么样?

   CASE
      WHEN 1 = 2 THEN 3
      WHEN 4 = 5 THEN 6
      ELSE 7
   END

所以也许你可以尝试类似的东西:

CASE
 WHEN  select 1 from customers where name='somename' = 1 THEN update...
ELSE  insert...
END

我不知道这是否有效,但似乎是一个开始。祝你好运!

编辑:在尝试了一些这些事情之后...我不知道这是否真的会对你有所帮助。看起来好像你不能在SELECT和INSERT之间切换;它必须是一个或另一个,CASE进入内部。您想做什么可能会或可能不会......

答案 1 :(得分:1)

我知道这可能为时已晚,但如果有人仍在寻找它:

合并

https://issues.apache.org/jira/browse/DERBY-3155

例如:

MERGE INTO customers USING SYSIBM.SYSDUMMY1 ON customers.name='somename' WHEN MATCHED THEN UPDATE SET name = 'someothername', ... WHEN NOT MATCHED THEN INSERT(id, name, ...) VALUES (DEFAULT, 'someothername', ...)