2017-03-01 46 views
0

基本上我有這種情況:如何在使用SQL滿足特殊條件時插入兩行?

對於表中的每一行,我必須取其中一列的值,並將其插入到一個新表中。

這是一個簡單的查詢:

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

。 。你真的打算使用「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;