INSERT INTO в операторе CASE - PullRequest
7 голосов
/ 13 мая 2011

Мне интересно, возможно ли использовать оператор INSERT INTO внутри оператора CASE в коде SQL.

Вот приблизительный псевдокод того, что я пытаюсь сделать:

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 ]

11 голосов
/ 13 мая 2011

Вам нужно будет выполнить с 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 голосов
/ 13 мая 2011

Вы могли бы сделать это два утверждения, как это.

Первая вставка в other при somevalue is null

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

Затем объединение влево для обеих таблиц на Somevalue составляет null или not 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

Примечание: я не уверен, что эквивалент DB2 Coalesce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...