基本上我有这种情况:
对于表中的每一行,我必须获取其中一列的值并将其插入到新表中。
这是一个简单的查询:
SELECT val
INTO NEW_TABLE
FROM SOURCE_TABLE;
但是,我有一个问题。在某些情况下,我想为同一个条目插入两行。
我可以使用以下三个查询来实现它:
SELECT 'val'
INTO NEW_TABLE
FROM SOURCE_TABLE WHERE NOT SPECIAL_CONDITION;
SELECT 'special_val1'
INTO NEW_TABLE
FROM SOURCE_TABLE WHERE SPECIAL_CONDITION;
SELECT 'special_val2'
INTO NEW_TABLE
FROM SOURCE_TABLE WHERE SPECIAL_CONDITION;
但有没有办法用一个人做到这一点?
我想到了这样的事情(这可能不起作用,因为我没有测试过它):
INSERT INTO NEW_TABLE
(
(SELECT 'val' FROM SOURCE_TABLE WHERE NOT CONDITION)
UNION
(SELECT 'val1' FROM SOURCE_TABLE WHERE CONDITION)
UNION
(SELECT 'val2' FROM SOURCE_TABLE WHERE CONDITION)
)
但最终如果最终效率更高,那么冗长就可以了。 那么使用单个查询是否有更有效的方法呢?
答案 0 :(得分:1)
这是你想要的吗?
SELECT *
INTO NEW_TABLE
FROM (SELECT (CASE WHEN condition THEN 'val1' ELSE 'val' END) as val
FROM SOURCE_TABLE
UNION ALL
SELECT 'val2'
FROM SOURCE_TABLE
WHERE CONDITION
) t;