Как использовать IF THEN ELSE для выбора и вставки или обновления запросов?

0

Я пытаюсь использовать следующий запрос

IF EXISTS (SELECT id FROM users WHERE id = 1) 
THEN 
    (INSERT INTO users (id, username) VALUES (2, user2)) 
ELSE 
    (UPDATE users SET username = 'userUpdated')

Но я продолжаю получать

/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO users (id) VALUES (2)) ELSE (UPDATE users SET id = 11)' at line 1 */

Также попытался использовать следующий запрос

IF EXISTS (SELECT id FROM users WHERE id = 1) 
THEN 
    (SELECT username FROM users WHERE id = 1) 
ELSE 
    (INSERT INTO users (id, username) VALUES (1, 'user'))

Но на этот раз я получил

/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ELSE 
(INSERT INTO users (id, username) VALUES (1, 'user'))' at line 4 */

Я что-то сделал или понял что-то не так?

Теги:
mariadb

4 ответа

2
Лучший ответ

Оператор if может использоваться только в блоках программирования, таких как хранимые процедуры, функции и триггеры.

В любом случае MySQL предлагает более простой синтаксис для этой функции: insert... on duplicate key update insert... on duplicate key update insert... on duplicate key update.

Чтобы использовать его, id должен иметь уникальный индекс, уникальное ограничение или быть определен как первичный ключ. Позвольте мне предположить, что так называемый столбец уже определен.

Затем:

INSERT INTO users (id, username)
    VALUES (2, user2)
    ON DUPLICATE KEY UPDATE username = 'userUpdated';
  • 0
    Итак, второе утверждение [SELECT else INSERT] не может быть применено?
  • 1
    @ Толео. , , Это утверждение обрабатывает оба условия.
Показать ещё 2 комментария
0

Попробуй это.

IF EXISTS (SELECT id FROM users WHERE id = 1) 
begin

    INSERT INTO users (id, username) VALUES (2, 'user2')
    end
ELSE 
    UPDATE users SET username = 'userUpdated'
0

В MariaDB 10.1 и новее вы можете использовать составные инструкции вне хранимых процедур. Это сообщение в блоге дает хорошее описание того, что вы можете с ним сделать.

Вот пример блога:

BEGIN NOT ATOMIC
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN  
   ROLLBACK;
   RESIGNAL;
  END;

  START TRANSACTION;

    stmt1;
    ....
    stmtN;

  COMMIT;
END
0

Вы пропускаете END IF (и полуколоны)?

IF EXISTS (SELECT id FROM users WHERE id = 1) 
    THEN 
    (SELECT username FROM users WHERE id = 1);
ELSE 
    (INSERT INTO users (id, username) VALUES (1, 'user'));
END IF;
  • 0
    Все еще дал мне ту же проблему
  • 0
    Как предположил Толео, эту конструкцию можно использовать только в блоках программирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню