2017-05-07 83 views
0

工作環境:使用sqlite for android操作系統。做批量插入。sqlite - 有條件替換並插入

考慮以下架構或sqlfiddle

CREATE TABLE employee_data 
    (
    id varchar(20) primary key, 
    name varchar(20), 
    dept varchar(20), 
    updation_date varchar(30) 
    ); 

INSERT INTO employee_data 
(id, name, dept, updation_date) 
VALUES 
("1", "john", "tech", "2017-04-30"); 

INSERT INTO employee_data 
(id, name, dept, updation_date) 
VALUES 
("2", "john2", "tech", "2017-05-01"); 

同時添加一個條目employee_data表,下面的條件必須滿足:

  1. ,如果給定的條目已不存在(上比較id的基礎),然後添加它。

  2. 如果該ID已經存在;然後檢查'updation_date'列 - 如果要添加的條目的updation_date稍後與已存在的條目相比較,則更新該行。 別無所求。

實施例: I) 需要插入("1", "john", "management", "2017-05-01") 如已經存在與ID = 1的條目,檢查updation_date; 現在因爲「2017-05-01」是更新的數據 - 更新該行。 所以輸出中 - ("1", "john", "management", "2017-05-01")

II) 需要插入("3", "steve", "management", "2017-06-01") 與ID NO條目= 3 employee_data,直接這一 輸出添加:("3", "steve", "management", "2017-06-01") is added.

III)

("2", "john2", "tech", "2017-04-01"); 

id=2行存在更多近期updation_date ("2017-05-01") 什麼都不做。

我試過搜索但找不到解決方案。我不知道如何使用插入到選擇語句。或者我是否可以使用雙重選擇。 我記得在oracle中使用合併類似的用例。

注: updation_date列可以在比較其改爲時間戳格式或數據格式,便於。

謝謝。

+2

你的意思是插入或更新? – Sami

+0

我認爲你需要使用觸發器。 https://sqlite.org/lang_createtrigger.html –

+0

請勿插入或更新。 –

回答

0

SQLite是一個嵌入式數據庫;你應該在你的應用程序中實現複雜的邏輯:

void conditionalReplaceAndInsert(ContentValues cv) 
{ 
    String oldDate = DatabaseUtils.stringForQuery(db, 
       "SELECT updation_date FROM employee_data WHERE id = ?", 
       new String[]{ cv.getAsString("id") }); 
    if (oldDate.equals("")) 
     db.insertOrThrow("employee_data", null, cv); 
    else if (oldDate.compareTo(cv.getAsString("updation_date")) < 0) 
     db.update("employee_data", cv, "id = ?", 
        new String[]{ cv.getAsString("id") }); 
    else 
     ; // do nothing 
}