Как мне перебрать таблицу и обновить определенный столбец на основе данных в другой таблице? - PullRequest
1 голос
/ 31 октября 2019

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

пользователей|user_id |имя_пользователя ||: -------------- | -----------------: ||1 |userX ||2 |userY |

user_roles |имя_пользователя |user_id ||: ----------------- | ---------------: ||userX |NULL ||userY |NULL |

Мне нужно как-то перебрать таблицу user_roles . Для каждого user_name в user_roles , который соответствует user_name в пользователей , конкретныйuser_id должен быть установлен вместо NULL в user_roles .. Как мне это сделать?

Примечание: user_name в таблице пользователей уникально.

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Это может быть немного лучше, чем использование подзапроса, но оба в порядке.

update r
set r.user_id = u.user_id
from user_roles r LEFT JOIN users u ON r.Username = u.Username
0 голосов
/ 31 октября 2019

Для каждого user_name в user_roles, который соответствует user_name в users, вместо NULL в user_roles

* должен быть установлен конкретный user_id. 1011 * Вы можете использовать коррелированный подзапрос:
update user_roles r
set r.user_id = (
    select u.user_id from users u where u.user_name = r.user_name
)

Предполагается, что user_name s уникальны в users. Если нет, то вам потребуется некоторая агрегация или фильтрация, чтобы подзапрос возвратил только одну запись. Например, он выберет младшие user_id из соответствующих user_name s:

update user_roles r
set r.user_id = (
    select min(u.user_id) from users u where u.user_name = r.user_name
)

В SQL Server синтаксис немного отличается:

update r
set r.user_id = (select min(u.user_id) from users u where u.user_name = r.user_name)
from user_roles r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...