2014-02-26 69 views
2

我想使用if exists語句,但有一些問題。我正在檢查LOCATION和NAME是否存在於我的NEWTABLE中,如果它們不存在,那麼我想將它們插入到我的NewTable中。所以基本上我試圖找到位置和名稱的記錄存在舊錶中,但不在newTable中。感謝
這裏是我的SQL如何使用,如果不存在sql

INSERT INTO NewTable(Location, Name) 
      SELECT Location, Name 
      FROM OldTable 
      WHERE Location and Name NOT IN (select Location, Name from NewTable) 
+0

您在這裏接近Oracle語法。 Oracle SQL可以使用元組:WHERE(Location,Name)NOT IN(從NewTable中選擇Location,Name)。大多數其他dbms不具備此功能,您必須使用EXISTS,正如Gordon Linoff在其答案中所建議的那樣。 –

+2

如果問題標題已包含解決方案,我總是感到驚訝。 「(不)存在」通常顯而易見。 –

回答

6

你會使用not exists此:

create unique index NewTable_Location_Name on NewTable(Location, Name); 

需要注意的是這樣的:

INSERT INTO NewTable(Location, Name) 
     SELECT Location, Name 
     FROM OldTable ot 
     WHERE NOT EXISTS (select 1 
          from NewTable nt 
          where nt.LOCATION = ot.LOCATION and nt.NAME = ot.NAME 
         ); 

您還可以通過建立一個唯一索引強制執行這一約束遇到重複項時會導致錯誤(沒有附加檢查)。

+0

這只是一個例子而不是真實姓名 – moe

+0

我得到這個錯誤,「在期望條件的上下文中指定的非布爾類型的表達式」 – moe