2017-05-04 38 views
0

如何在插入前檢查存在的值?INSERT與IF存在SQL,SQLite

INSERT INTO DeliveryOrder (ContactName, ContactID) VALUES ('Andy', (SELECT ContactID FROM Contact WHERE ContactName = 'Andy')) 

我想在插入記錄之前驗證ContactID是否存在。

只好嘗試以下,但不工作:

INSERT INTO DeliveryOrder (ContactName, ContactID) VALUES ('Andy', (SELECT ContactID FROM Contact WHERE ContactName = 'Andy')) WHERE IF Exists (SELECT ContactID FROM Contact WHERE ContactName = 'Andy') 
+1

你可以事先檢查(在一個事務),或者你可能會發現'INSERT OR REPLACE'或'INSERT OR IGNORE'有用(參見[SQLite文檔](http://sqlite.org/lang_insert.html))。 – TripeHound

+0

不要檢查存在。在導入過程中定義唯一的約束並忽略約束違規錯誤。 – ceving

回答

2
INSERT INTO DeliveryOrder (ContactName, ContactID) 
select 'Andy', ContactID 
    from Contact 
    WHERE ContactName = 'Andy' 
+0

這個效果更好 - 它有助於將插入視爲記錄您的選擇 - 因此,如果您編寫select語句以返回您首先需要的值,那麼Insert語句將顯示在其上方(子查詢有困難) –

+0

但我的聯繫人姓名是另一個固定值,那麼contactID將從表中取出。 – user14351

+0

@ user14351您可以指定任何不在「select」子句中的表中的值。示例已更新。 – Mike

0

這將幫助你

IF EXISTS (SELECT ContactID 
     FROM Contact c 
     WHERE 
      c.ContactName ='Andy' 
     ) 
Insert Into DeliveryOrder (ContactName, ContactID) 
     VALUES ('Andy', (SELECT top 1 ContactID FROM Contact WHERE ContactName = 'Andy')) 

試試這個