2013-09-25 13 views
0

我想插入一個新數據,但我想在查詢中放入一個條件,如果有數據存在,它將不會插入,如果沒有,則可以插入。如何在使用INSERT INTO時過濾重複

INSERT INTO user_permission_index (guid, code, name,description, perm_type, time_create) 
VALUES 
(uuid_generate_v1(),'perm_trading_cashsale_by_branch','label_CanissueCashsaleByBranch','','acc_branch_index','0001-01-01') 
WHERE NOT EXISTS (SELECT * 
        FROM user_permission_index 
        WHERE code = 'perm_trading_cashsale_by_branch' 
        AND name = 'label_CanissueCashsaleByBranch'); 

我在WHERE NOT語法錯誤。你們能幫助我嗎?謝謝。

+0

如果是Oracle,我建議合併。 – SriniV

回答

2

您需要使用的SELECT代替VALUES

INSERT INTO user_permission_index (guid, code, name,description, perm_type, time_create) 
select uuid_generate_v1(), 
     'perm_trading_cashsale_by_branch', 
     'label_CanissueCashsaleByBranch', 
     '', 
     'acc_branch_index', 
     '0001-01-01' 
WHERE NOT EXISTS (SELECT * 
        FROM user_permission_index 
        WHERE code = 'perm_trading_cashsale_by_branch' 
        AND name = 'label_CanissueCashsaleByBranch'); 

(我假設你是因爲uuid_generate_v1()功能的PostgreSQL)

如果你是一個經過「更新或插入」功能,您可能要看看這個:Insert, on duplicate update in PostgreSQL?

0

你需要鏈接你的內部選擇到你的外部插入語句

INSERT INTO user_permission_index upi (guid, code, name,description, perm_type, time_create) 
SELECT (uuid_generate_v1(),'perm_trading_cashsale_by_branch','label_CanissueCashsaleByBranch','','acc_branch_index','0001-01-01') 
WHERE NOT EXISTS (
SELECT * 
FROM user_permission_index 
WHERE code = 'perm_trading_cashsale_by_branch' 
    AND name = 'label_CanissueCashsaleByBranch' 
     AND id = upi.id 
); 

但我認爲這將是更好地說

INSERT INTO user_permission_index (guid, code, name,description, perm_type, time_create) 
SELECT (uuid_generate_v1(),'perm_trading_cashsale_by_branch','label_CanissueCashsaleByBranch','','acc_branch_index','0001-01-01') 
WHERE nvl(code, '') <> 'perm_trading_cashsale_by_branch' 
    OR nvl(name, '') <> 'label_CanissueCashsaleByBranch';