Обновление таблиц пересечений, альтернатива delete-> insert - PullRequest
1 голос
/ 23 февраля 2011

Надеюсь, мне поможет еще один SQL.Предположим, что следующая таблица и отношения они сжаты.


orders(PK_refno,customer, status)
order_accessories(PK_refno,PK_acc)
accessories(PK_acc,name,desc)

Как вы можете видеть, это типичный сценарий 1:*----*:*----*:1, проблема или моя проблема при обновлении, поскольку аксессуары, которые есть в каждом заказе, могутбыть измененным, что означает, что пользователь может добавлять / удалять аксессуары.

Единственный способ, которым я думал сделать это с помощью MySQL, - это удалить все аксессуары и затем вставить обновленные.

Мне так не нравится. Поскольку я думаю, что, вероятно, есть способ SQL сделать это.Может быть, кто-то может предложить и расширенный запрос (который я, конечно, изучу)

Другой способ, которым я думал, был:

Получить оригиналы. Сравните их и удалите / добавьте различия.

Я тоже не фанат этого, потому что это будет сделано в приложении, а не в базе данных.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2011

Допустим, таблица начинается следующим образом.

order_accessories
PK_refno  PK_acc
1         73
1         74
1         75
1         86
1         92

Скажем также, что 75 должно быть 76. Предполагая, что вменяемый пользовательский интерфейс, пользователь может просто изменить значение 75 на 76. Вменяемый пользовательский интерфейс отправит этот оператор в dbms.

update order_accessories
set PK_acc = 76
where (PK_refno = 1 and PK_acc = 75);

Если бы не предполагалось, что 75 вообще был там, тогда пользователь просто удалил бы эту одну строку. Вменяемый пользовательский интерфейс отправит это заявление в базу данных.

delete from order_accessories
where (PK_refno = 1 and PK_acc = 75);
0 голосов
/ 14 апреля 2011

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

...