ВСТАВКА С НЕСУЩЕСТВУЮЩИМ

#sql #insert #exists #interbase

#sql #вставить #существует #interbase

Вопрос:

Я хотел бы объединить запрос на вставку с «где не существует»

Вот мой SQL :

 INSERT INTO MYTABLE (ACT_ORDER, MNU_ACTION, ACT_STATUT, ACT_BEFORE, ACT_AFTER)
SELECT (1,'acOuvPOS', 'T', 'T', NULL)
WHERE NOT EXISTS (SELECT * FROM MYTABLE WHERE  (MNU_ACTION ='acOuvPOS' AND ACT_STATUT = 'T' AND ACT_BEFORE= 'T');
  

Но когда я выполняю SQL, у меня возникает эта проблема

Недопустимый токен. Динамическая ошибка SQL. Код ошибки SQL = -104. Неизвестный токен — строка 2, символ 8. ,.

Как я могу это решить, пожалуйста, заранее спасибо

Комментарии:

1. Какую версию SQL вы используете (например, MySQL)?

2. Вам не хватает закрытия ) перед завершением ;

3. Какую СУБД вы используете?

4. Извините, я пропустил закрытие) при выполнении запроса я использую Interbase 6.0.2

5. Я думаю, что для этого SELECT нужно FROM предложение.

Ответ №1:

ВСТАВИТЬ В MYTABLE (ACT_ORDER, MNU_ACTION, ACT_STATUT, ACT_BEFORE, ACT_AFTER) ВЫБЕРИТЕ 1, ‘acOuvPOS’, ‘T’, ‘T’, NULL, ГДЕ НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * Из MYTABLE, ГДЕ MNU_ACTION =’acOuvPOS’ И ACT_STATUT = ‘T’ И ACT_BEFORE= ‘T’)

Комментарии:

1. Недопустимый токен. Динамическая ошибка SQL. Код ошибки SQL = -104. Неизвестный токен — строка 1, символ 0. ЕСЛИ.

2. Недопустимый токен. Динамическая ошибка SQL. Код ошибки SQL = -104. Неизвестный токен — строка 2, символ 36. ГДЕ.

Ответ №2:

вы можете просто сказать :

ЕСЛИ ( НЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * Из MYTABLE, ГДЕ (MNU_ACTION =’acOuvPOS’ И ACT_STATUT = ‘T’ И ACT_BEFORE = ‘T’) НАЧИНАЕТСЯ ВСТАВКА В MYTABLE (ACT_ORDER, MNU_ACTION, ACT_STATUT, ACT_BEFORE, ACT_AFTER) (1,’acOuvPOS’, ‘T’, ‘T’, NULL) ЗАКАНЧИВАЕТСЯ