如何使用SQL满足特殊条件时插入两行?
How to insert two rows when a special condition is met using SQL?
基本上我的情况是这样的:
对于 table 中的每一行,我必须获取其中一列的值并将其插入到新的 table。
这是一个简单的查询:
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)
)
但最终冗长是可以的,如果它最终会更有效率的话。
那么有没有一种更有效的方法可以通过单个查询来做到这一点?
这是你想要的吗?
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;
基本上我的情况是这样的:
对于 table 中的每一行,我必须获取其中一列的值并将其插入到新的 table。
这是一个简单的查询:
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)
)
但最终冗长是可以的,如果它最终会更有效率的话。 那么有没有一种更有效的方法可以通过单个查询来做到这一点?
这是你想要的吗?
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;