2013-11-27 5 views
0

У меня проблема с синтаксисом. Мне нужно использовать IF в sqlite, и я заменю 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

Смежные вопросы