Mysql — вставка на основе другой таблицы, где условие — ON DUPLICATE KEY UPDATE

ОБНОВЛЕНИЕ

Я нашел ответ и предоставил его ниже

Приветствую всех,

Я хочу вставить в таблицу 1) на основе условия в другой таблице 2) и используя ON DUPLICATE KEY UPDATE в первой таблице.

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

INSERT INTO my_all_count (type,code,count) values ( 0,1,1) 
ON DUPLICATE KEY UPDATE count = count + 1 
WHERE NOT EXISTS ( 
  select 1 from my_reg_count 
  where country_code=CurrCountry and type=0 and code=0);

здесь 1) я хочу вставить в таблицу my_all_count 2) тип, код является ключом, и если он существует, увеличивая округ на 1 3) вставлять только тогда, когда он не существует в my_reg_count

Спасибо за вашу помощь

С Уважением

Киран


person Bujji    schedule 17.04.2011    source источник
comment
Итак, вы хотите вставить, обновить и не вставлять одновременно. Хороший. Хранимая процедура или обработка вне mysql.   -  person Khez    schedule 17.04.2011


Ответы (2)


Я нашел решение, и вот ответ

INSERT INTO my_all_count (type,code,count) 
    select 0,0,1 from dual WHERE NOT EXISTS ( 
         select * from my_reg_count where country_code=CurrCountry 
          and type=0 and code=0) ON DUPLICATE KEY UPDATE count = count + 1;
person Bujji    schedule 17.04.2011

Не уверен, что это сработает, но я уверен, что предложение ON DUPLICATE KEY должно быть после предложения WHERE:

INSERT INTO my_all_count (type,code,count) values (0,1,1) 
WHERE NOT EXISTS ( 
  select 1 from my_reg_count 
  where country_code=CurrCountry and type=0 and code=0)
ON DUPLICATE KEY UPDATE count = count + 1; 
person Galz    schedule 17.04.2011
comment
Спасибо Галз за ответ. Даже без использования Duplicate Key Update он говорит, что показывает синтаксическую ошибку в предложении where. Я имею в виду, что даже следующий оператор вставки тоже неверен. ВСТАВЬТЕ В значения my_all_count (тип, код, количество) (0,1,1), ГДЕ НЕ СУЩЕСТВУЕТ (выберите 1 из my_reg_count, где код_страны = CurrCountry и тип = 0 и код = 0) - person Bujji; 17.04.2011
comment
@Bujji - можете ли вы объяснить логику этого ГДЕ? Какие таблицы содержат столбцы country_code и CurrCountry? Вероятно, это можно переписать с помощью JOIN... - person Galz; 17.04.2011
comment
Спасибо Галз за быстрый ответ. Этот my_reg_count имеет количество пользователей, зарегистрированных на уровне страны. Я имею в виду, что это как США-10, БРАЗИЛИЯ-20, Канада-30 ... и my_all_count будет подсчитывать общее количество стран, всего 3 в этом случае. Я думаю, что нашел решение сейчас. Вот код, если он работает, я обновлю свой вопрос ВСТАВЬТЕ В my_all_count (тип, код, количество) выберите 0,0,1 из двойного, ГДЕ НЕ СУЩЕСТВУЕТ (выберите * из my_reg_count, где код_страны = CurrCountry и тип = 0 и код = 0 ) ПРИ ОБНОВЛЕНИИ ДУБЛИЧНОГО КЛЮЧА count = count + 1; - person Bujji; 17.04.2011
comment
@Bujji - похоже, вам нужен был SELECT, чтобы применить WHERE. Дайте мне знать, если это сработало или вам нужна дополнительная помощь - person Galz; 17.04.2011
comment
Я только что протестировал его, и он работает нормально. Большое спасибо за предоставленные мне материалы. - person Bujji; 17.04.2011