在CASE语句中插入
问题描述:
我想知道是否有可能在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
答
您将需要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;
答
你可以做到这一点的两个语句,像这样。
先插入到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
注意:我不确定Coalesce的DB2等价物是
这就是问题所在。我不确定如何在DB2 – Connection 2011-05-13 19:21:21
中复制类似的东西。从文档开始?我已经为您的代码提供了一个合理的结构来完成您要做的事情。您可以深入了解确切语法的细节。我知道这个结构可以在SQL Server或MySql中工作。 – mellamokb 2011-05-13 19:22:59