在CASE声明中插入INTO

时间:2011-05-13 19:05:33

标签: sql db2

我想知道在SQL代码的CASE语句中是否可以使用INSERT INTO语句。

这是我正在尝试做的粗略伪代码:

SELECT (CASE (SELECT SomeValue FROM SomeTable)
            WHEN NULL THEN
                INSERT INTO OtherTable VALUES (1, 2, 3)
                (SELECT NewlyInsertedValue FROM OtherTable)
            ELSE
                (SELECT SomeOtherValue FROM WeirdTable)
        END),
       Column1,
       Column2
FROM BigTable

2 个答案:

答案 0 :(得分:11)

您需要使用IF...THEN语句来完成。大致相似的东西(不确定db2的语法):

SELECT @SomeValue = SomeValue FROM SomeTable

IF @SomeValue IS NULL
    INSERT INTO OtherTable VALUES (1, 2, 3)
    SELECT NewlyInsertedValue FROM OtherTable;
ELSE
    INSERT INTO OtherTable VALUES (1, 2, 3)
    SELECT SomeOtherValue FROM WeirdTable;
END IF;

答案 1 :(得分:0)

你可以这样做两个陈述。

首次在other

时插入somevalue is null
INSERT INTO othertable 
SELECT 1, 
       2, 
       3 
FROM   bigtable 
WHERE  somevalue IS NULL;

然后左键加入Somevalue nullnot null

SELECT Coalesce(othertable.newlyinsertedvalue, weirdtable.someothervalue) foo, column1, column2 FROM bigtable LEFT OUTER JOIN othertable ON somevalue IS NULL LEFT OUTER JOIN weirdtable ON somevalue IS NOT NULL 的两个表格
       LEFT OUTER JOIN othertable 
         ON somevalue IS NULL 
           and bigtable.id = othertable.id
       LEFT OUTER JOIN weirdtable 
         ON somevalue IS NOT NULL 
           and bigtable.id = weirdtable .id

我的猜测是你实际上必须修改连接类似

{{1}}

注意:我不确定Coalesce的DB2等价物是什么