Как обновить, если данные существуют, вставьте новые данные (несколько строк) - PullRequest
1 голос
/ 06 июля 2011

Мне нужно создать оператор вставки и обновления, когда сегодняшняя дата отсутствует в базе данных, она будет вставлена, иначе она обновит QTY (из excel [эту часть я сделал]), полученную с сегодняшнего дня.

Но есть много строк, которые необходимо вставить и обновить.

1) он проверит за последние 4 дня в базе данных, если там не включается сегодня, он просто вставит данные длясегодня и обновите данные за последние 3 дня.с другой стороны, если он содержится сегодня, он просто обновится.

PS: я пытался использовать INSERT... ON DUPLICATE KEY UPDATE, но это затронуло только 1 строку.

Если оператор else, когда я использовал это, он вставляет только одну строку данных, тогда как остальные просто обновляют.

Может дать какой-нибудь совет или пример.

Ответы [ 3 ]

1 голос
/ 06 июля 2011

предположим, что вы массово копируете свои данные из Excel во временную таблицу tbl, а ваша фактическая таблица - tbl1, затем делаете что-то вроде этого

   begin transaction;
 if not exists(select * from tbl(updlock holdlock) where...)
begin
   insert into tbl1...
else
begin
   update tbl1...
end
commit;
0 голосов
/ 18 ноября 2011

Я нашел эту статью на mysql, в которой говорится, что она поддерживает множественную вставку. http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

Это утверждение идентично следующим двум утверждениям:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=3;
INSERT INTO table (a,b,c) VALUES (4,5,6)
  ON DUPLICATE KEY UPDATE c=9;

Так что, если мы хотим редактировать прямо, мы могли бы сделать что-то вроде этого.

INSERT INTO table (uniquekey,data) VALUES (1,2),(4,5)
      ON DUPLICATE KEY UPDATE data=VALUES(data);
0 голосов
/ 06 июля 2011

Какой язык вы используете для этого? Я делал нечто подобное в Ruby раньше. Я бы сделал столбец (Дата в вашем случае) уникальным на уровне базы данных, а затем просто попытался бы вставить каждую запись. Когда я получаю исключение, потому что Дата не уникальна, я затем продолжаю обновлять QTY.

...