2013-11-27 73 views
0

我有一個語法問題。 我需要在sqlite中使用IF,並且我替換IF-CASE。
我的聲明不起作用,我不知道,有什麼不對?INSERT INTO使用CASE - sqlite?

CASE 
WHEN EXISTS 
(SELECT sql FROM sqlite_master WHERE name = 'TEST_TABLE' AND type = 'table' AND sql LIKE '%aaaa%') 
THEN 
INSERT INTO atabela_new(id, idMain, idHistory, aNew) SELECT id, idMain, idHistory, aNew FROM a_tabela 
ELSE 
INSERT INTO atabela_new(id, idMain, idHistory) SELECT id, idMain, idHistory FROM a_tabela; 
+0

你會得到任何錯誤? – Cris

+0

在SQLite中,您可以在表達式中使用CASE,而不是這種方式!你真的假裝要做什麼? –

+0

如果條件爲真或者其他'INSERT',如果條件不成立,我想要'INSERT'。 – user3013711

回答

3

假設爲aNew默認爲NULL:

INSERT INTO atabela_new(id, idMain, idHistory, aNew) 
SELECT id, 
     idMain, 
     idHistory, 
     CASE 
      WHEN EXISTS 
       (SELECT sql FROM sqlite_master WHERE name = 'TEST_TABLE' AND type = 'table' AND sql LIKE '%aaaa%') 
      THEN aNew 
      ELSE NULL 
     END 
FROM a_tabela 

否則,你就需要把這種邏輯在應用程序代碼。

+0

幹得好D斯坦利,謝謝你! – user3013711

-1

如果您只想插入一個語句,如果爲true或者其他語句爲false,爲什麼不使用if語句?

IF EXISTS(SELECT sql FROM sqlite_master WHERE name = 'TEST_TABLE' AND type = 'table' AND sql LIKE '%aaaa%') 
BEGIN 
    INSERT INTO atabela_new(id, idMain, idHistory, aNew) SELECT id, idMain, idHistory, aNew FROM a_tabela 
END 
ELSE 
    INSERT INTO atabela_new(id, idMain, idHistory) SELECT id, idMain, idHistory FROM a_tabela; 
END 
+1

...因爲SQLite沒有這種形式的IF語句。這就是問題的關鍵所在,如何使用對SQLite有效的語法來完成所寫的內容。 – NigelK