MySql объединяет записи из одной таблицы - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь выполнить команду sql для обновления строк и объединения строк с соответствующими данными.

В качестве примера того, что я пытаюсь сделать, у меня есть таблица, показанная ниже.Я хочу обновить все записи, которые имеют userEmail = user@user.com, чтобы стать admin@example.com.Если я пытаюсь выполнить простое обновление, я сталкиваюсь с дублирующимися ошибками ключа.

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

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

Какую операцию я могу использовать для этого?

Original table
___________________________________________________________________________
userEmail             |productId   |usItemId |quantity|timestamp          |
----------------------|------------|---------|--------|-------------------|
admin@example.com     |111111111111|222222222|      77|2019-04-07 02:19:41|<--
admin@example.com     |xxxxxxxxxxxx|xxxxxxxxx|       1|2019-04-07 02:19:41|
admin@example.com     |xxxxxxxxxxxx|xxxxxxxxx|       1|2019-04-07 02:19:41|
user@user.com         |111111111111|222222222|      22|2019-04-07 02:19:41|<--
user@user.com         |xxxxxxxxxxxx|xxxxxxxxx|       1|2019-04-06 05:34:58|
user@user.com         |xxxxxxxxxxxx|xxxxxxxxx|       1|2019-04-06 05:35:30|



Updated table
___________________________________________________________________________
userEmail             |productId   |usItemId |quantity|timestamp          |
----------------------|------------|---------|--------|-------------------|
admin@example.com     |111111111111|222222222|      99|2019-04-07 02:19:41|<--
admin@example.com     |xxxxxxxxxxxx|xxxxxxxxx|       1|2019-04-07 02:19:41|
admin@example.com     |xxxxxxxxxxxx|xxxxxxxxx|       1|2019-04-07 02:19:41|
admin@example.com     |xxxxxxxxxxxx|xxxxxxxxx|       1|2019-04-06 05:34:58|
admin@example.com     |xxxxxxxxxxxx|xxxxxxxxx|       1|2019-04-06 05:35:30|

1 Ответ

2 голосов
/ 15 апреля 2019

Я бы предложил два шага:

insert into original (userEmail, productId, usItemId, quantity, timestamp)
    select 'admin@example.com', productId, usItemId, quantity, timestamp
    from original o
    where o.userEmail = 'user@user.com'
    on duplicate key update quantity = values(quantity) + quantity;

delete from original
    where o.userEmail = 'user@user.com';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...