Использование триггера для изменения существующей строки, когда строка с дублирующим ключом добавлена ​​в MySQL - PullRequest
1 голос
/ 09 декабря 2011

У меня есть таблица с именем jobs в базе данных MySQL.

Один пользователь добавляет данные, импортируя файл Excel в связанную таблицу в Access.

Это прекрасно работает, за исключением случая.есть строка с повторяющимся идентификатором.

Что бы я хотел сделать, когда это произойдет, это взять данные из одного столбца (comments) новой строки и вставить их в существующую строку сидентичный идентификатор.

Например, исходная таблица:

id    customer    product    comments
1     Jeff        Widget     Hello
2     Fred        Sprocket   Important comment here

Некоторые импортированные данные:

id    customer    product    comments
2     Fred                   A new and different comment
3     Jerry       Widget     More comments

Таблица после импорта вышеуказанных данных:

id    customer    product    comments
1     Jeff        Widget     Hello
2     Fred        Sprocket   A new and different comment
3     Jerry       Widget     More comments

Я в растерянности относительно того, как создать триггер, который достиг бы этой цели.

Любой совет?

РЕДАКТИРОВАТЬ: решил использовать сценарий PHP для очисткидубликаты по факту.Спасибо за вклад, все.

Ответы [ 4 ]

0 голосов
/ 10 декабря 2011

Я сделал это недавно, используя mssql. Я запустил обновление первым. После этого я запустил вставку на том, что осталось. Я никогда не работал с доступом и, честно говоря, не хочу.

update table1 set comments = (select comments from table2 where table2.id = table1.id) where table1.id in (select table2.id from table2);

insert into table1 (customer,product,comments) select customer, product, comments from table2 where table2.id not in (select table1.id from table1);

Не уверен, что вы можете делать объединения на вставке и обновлять, как вы можете в mssql / t-sql

Надеюсь, это поможет

0 голосов
/ 10 декабря 2011

Я бы предложил использовать REPLACE INTO. Но вы также должны быть осторожны с REPLACE INTO, так как он фактически удаляет предыдущую запись и начинает новую строку.

http://dev.mysql.com/doc/refman/5.0/en/replace.html

0 голосов
/ 10 декабря 2011

Исходя из моего опыта работы со связанными таблицами Access, это можно сделать только с помощью кода или двухэтапного процесса запроса. Сначала вставьте новые записи, а затем выполните операцию обновления с оставшейся частью набора данных (вы также можете сделать это в обратном порядке). Это то, что вам нужно делать на постоянной основе, или разовая сделка?

0 голосов
/ 09 декабря 2011

Я думаю , это может помочь.

Насколько я понимаю, вы запускаете оператор и INSERT и говорите MySQL, что делать UPDATE при вставке дублирующего ключа.

Итак, оператор вставки в таблицу будет выглядеть примерно так:

INSERT INTO mysqlTable (id,customer,product,comment)
SELECT id,customer,product,comment FROM linkedTable
  WHERE x = y
ON DUPLICATE KEY UPDATE comment = linkedTable.comment;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...