【问题标题】:conditional statements in derbyderby 中的条件语句
【发布时间】:2011-01-20 00:14:19
【问题描述】:

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

if exists (select 1 from customers where name='somename') 
    update customers ...
else 
    insert into customers ...

在德比中? Derby 也没有 mysql 的“替换为”。

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

【问题讨论】:

    标签: database derby


    【解决方案1】:

    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 进入其中。你想做的事情可能会也可能不会......

    【讨论】:

    • 这行不通。记录不充分的 Derby DB 没有提到 CASE 子句只能用作另一个 SQL 子句的一部分,例如选择。例如,SELECT CASE COUNT(*) WHEN 1 THEN 10 ELSE 20 END FROM WHERE
    【解决方案2】:

    我知道这可能为时已晚,但万一有人还在寻找它:

    合并

    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', ...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 2019-08-27
      • 2014-02-15
      • 2011-09-25
      • 2014-02-05
      相关资源
      最近更新 更多