2011-05-13 202 views
7

我想知道是否有可能在SQL代码中的CASE语句中具有INSERT INTO语句。在CASE语句中插入

这里是什么,我试图做一个粗略的伪代码:

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 

回答

9

您将需要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; 
+0

这就是问题所在。我不确定如何在DB2 – Connection 2011-05-13 19:21:21

+0

中复制类似的东西。从文档开始?我已经为您的代码提供了一个合理的结构来完成您要做的事情。您可以深入了解确切语法的细节。我知道这个结构可以在SQL Server或MySql中工作。 – mellamokb 2011-05-13 19:22:59

0

你可以做到这一点的两个语句,像这样。

先插入到othersomevalue is null

INSERT INTO othertable 
SELECT 1, 
     2, 
     3 
FROM bigtable 
WHERE somevalue IS NULL; 

然后左连接到两个表上Somevaluenullnot 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 

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