如何使用SQL满足特殊条件时插入两行?

时间:2017-03-01 23:05:07

标签: sql psql

基本上我有这种情况:

对于表中的每一行,我必须获取其中一列的值并将其插入到新表中。

这是一个简单的查询:

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)
)

但最终如果最终效率更高,那么冗长就可以了。 那么使用单个查询是否有更有效的方法呢?

1 个答案:

答案 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;