2017-03-01 10 views
0

基本的に私はこの状況にあります:SQLを使用して特別な条件が満たされたときに2行を挿入するにはどうすればよいですか?

テーブルの各行について、1つの列の値を新しいテーブルに挿入する必要があります。

それは単純なクエリです:

SELECT val 
INTO NEW_TABLE 
FROM SOURCE_TABLE; 

はしかし、私は問題を抱えています。特定のシナリオでは、私は同じエントリの2つの行を挿入したいと思います。

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; 

をしかし、単一のものを使用してこれを行うにはどのような方法があります:

私はそれは、次の3つのクエリを使用して達成することができますか?

は、私は(私はそれをテストしていないので、動作しない場合があります)このような何かを考えた:

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

しかし、それはより効率的になってしまう場合は、エンド饒舌でOKです。 これは、単一のクエリでこれを行うより効率的な方法はありますか?

+0

。 。あなたは本当に "psql"タグを意図していますか? –

答えて

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; 
関連する問題