SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.05.2013 21:43:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Попытка заменить insert ignore или insert on update

Приветствую, коллеги!

На фоне имеющихся insert ignore и insert on update мой вопрос может показаться странным, но для дела надо smile.
Собственно, у меня конечная цель - сделать инсерт, который вставляет в таблицу запись, если выполняются какие-то условия на другой (других) таблицах (присутствует или отсутствует какой-то набор строк). Привожу более упрощенный пример, вполне себе работающий в слоновьей среде.

create table t(id int primary key);

Вставляем сотню, если ее еще нету в таблице.

insert into t select 100 where not exists (select 1 from t where id = 100 );
Получаю

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where not exists (select 1 from t where id = 100 )' at line 1

У кого есть идеи, как можно подобного рода конструкцию реализовать - поделитесь плиз.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#2 19.05.2013 12:23:32

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Попытка заменить insert ignore или insert on update

А чем не подходит стандартная конструкция INSERT IGNORE ?

INSERT IGNORE INTO t(id) SELECT id FROM t WHERE id = 100


Хотя так наверно будет по оптимальней
INSERT INTO t(id)
SELECT 100 'id' FROM DUAL
WHERE IF((SELECT id FROM t WHERE id = 100),0,1);

Отредактированно evgeny (19.05.2013 12:55:59)

Неактивен

 

#3 20.05.2013 01:29:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Попытка заменить insert ignore или insert on update

evgeny написал:

А чем не подходит стандартная конструкция INSERT IGNORE ?

INSERT IGNORE INTO t(id) SELECT id FROM t WHERE id = 100

Тем и не подходит, что не везде она есть, та конструкция, это же я упрощенный вариант привел, реально сложнее ситуация, там реально в другую таблицу лазаю, чтобы проверить то условие, от которого зависит вставка.

evgeny написал:

Хотя так наверно будет по оптимальней

INSERT INTO t(id) SELECT 100 'id' FROM DUAL WHERE IF((SELECT id FROM t WHERE id = 100),0,1);

Спасибо! То, что надо, по ходу.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson