2012-08-03 41 views
0

什麼問題在此代碼:SQL - 從一個表中插入行到另一個當條件滿足

INSERT INTO main.table_1 
    (SELECT * 
    FROM TempDatabase.table_1 
    WHERE TempDatabase.table_1.ID != "5855CA0F8E23") 

我的ID做了一個條件,以防止重複(也因爲我申請的主要一個約束。表格1)。但是,當我在SQLiteManager中運行時,出現語法錯誤「near SELECT」。

如果我刪除了括號,還是我得到了另一個錯誤是由於違反限制在main.table_1(因爲如果WHERE條件被完全忽略!)

我在做什麼錯在這裏!

回答

3

正確的語法是第二次嘗試,沒有括號。 (圓括號用於定義要插入的列名稱。)

由於您認爲將臨時數據插入主數據庫實際上違反了主數據庫的某些約束表,即使您排除具有編號爲5855CA0F8E23的一條記錄。檢查你的約束。

+0

你絕對正確:)謝謝。 – 2012-08-03 04:27:48

2

您需要使用IGNOREREPLACE(http://www.sqlite.org/lang_insert.html)

如果發生違反約束的行會被跳過,並且它將繼續:

INSERT OR IGNORE INTO main.table_1 SELECT * from TempDatabase.table_1 

如果發生違反約束在main.table_1該記錄將被刪除,而從TempDatabase.table_1全行將被插入:

INSERT OR REPLACE INTO main.table_1 SELECT * from TempDatabase.table_1 

沒有方法「合併行」 - 即將兩個選項卡中的數據聚合到新行中。

+0

是的,這將解決這個問題。 bfares的答案也是正確的,我使用你的語法解決了這個問題。所以我查了他的答案爲「答案」,你的答案有+1 :) – 2012-08-03 04:29:02

相關問題