Как вставить в столбец таблицы SQL с помощью запроса SELECT?

#sql #sql-server #database #join

#sql #sql-сервер #База данных #Присоединиться

Вопрос:

У меня есть таблицы A, B и C.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Я хочу вставить значения UserRoleName в таблицу C в столбец UserRoleName в таблице A для соответствующего идентификатора пользователя. Идентификатор пользователя в таблице A является внешним ключом из таблицы B. UserRoleId — это внешний ключ в таблице B из таблицы C. Как я могу это сделать?

Я попытался использовать этот запрос,

 insert into A (UserRoleName)
(
select C.UserRoleName
from C
inner join B on B.UserRoleId = C.UserRoleId
inner join A on A.UserId  = B.UserId
)
 

Но это дает:

Не удается вставить значение NULL в столбец ‘Z

который не имеет значения null в столбце A. Однако я не указал этот столбец на картинке таблицы А. Можете ли вы помочь мне понять, что я делаю не так?

Комментарии:

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

Ответ №1:

Вам нужно использовать обновление следующим образом:

 Update a
   Set a.userrolename = c.rolename
 From b join c on b.userroleid = b.userroleid and b.userid = a.userid
Where a.userrolename is null
 

Или используя стандартный sql (подзапрос) следующим образом:

 Update a
  Set a.userrolename = 
      (Select c.userrolename
         From b join c on b.userroleid = c.userroleid
        Where b.userid = a.userid)
 Where a.userrolename is null;