скажем, у меня есть 3 таблицы в моей базе данных SQL:
Аспнетусерролес — хранить записи, связывающие пользователя с ролью AspNetUsers - удерживает пользователей Аспнетролес - содержит роли
Я хотел обновить роль, назначенную пользователю, чей адрес электронной почты: [email protected]
Я создал этот запрос, и он работает:
-- Update tester account role
Update AspNetUserRoles
Set RoleId = 4
From AspNetUsers as b Inner Join AspNetUserRoles as a
On a.UserId = b.Id Where b.Email = '[email protected]'
Теперь, как отредактировать этот запрос, вместо предоставления идентификатор роли (в данном случае 4), получить идентификатор конкретной роли из ее таблицы, указав ее имя? В таблице Аспнетролес есть поле «имя», я попытался с другим внутренним соединением, но потерпел неудачу. Любая помощь будет оценена по достоинству, спасибо.
Как бы вы, по логике, сопоставили его роль с электронной почтой?
Я использую этот запрос для тестирования автоматизации, электронная почта мне известна (это электронная почта из учетной записи, настроенной для тестировщика автоматизации, поэтому она никогда не меняется) спасибо
В вашем запросе UPDATE
я удалил JOIN
, потому что эта информация есть в вашей почтовой таблице.
Поэтому я добавил подзапрос для обновления вашего RoleId
Попробуй это:
UPDATE AspNetUserRoles
SET RoleId = (SELECT c.id FROM AspNetRoles c WHERE c.name = 'MyRoleName')
FROM AspNetUsers as b
WHERE b.Email = '[email protected]'
AND AspNetUserRoles.UserId = b.Id
Это работает, я приму ответ в течение нескольких оставшихся минут, спасибо.
@Matthewek: Хорошего дня ;)
Вы можете написать запрос для получения идентификатора роли в зависимости от имени
SELECT r.id
FROM AspNetRoles r
WHERE r.name = 'YourRoleName'
LIMIT 1
И используйте этот запрос как подзапрос в вашем main :
Update AspNetUserRoles
Set RoleId =
(
SELECT r.id
FROM AspNetRoles r
WHERE r.name = 'YourRoleName'
LIMIT 1
)
From AspNetUsers as b Inner Join AspNetUserRoles as a
On a.UserId = b.Id Where b.Email = '[email protected]'
Вы можете использовать JOIN
следующим образом:
update aur
set RoleId = 4
from AspNetUsers au join
AspNetUserRoles ur
on aur.UserId = au.Id join
AspNetRoles r
on ur.RoleId = r.roleId
where au.Email = '[email protected]' and
r.Name = ?;
Хотя это кажется странным. ApsNetUserRoles
звучит как соединительный стол. Я ожидаю, что вы добавите роль, вставив роль в эту таблицу.
Гордон : «как отредактировать этот запрос, вместо того, чтобы предоставлять RoleId (в данном случае 4), извлекать конкретный идентификатор роли из своей таблицы, указав ее имя?»
Попробуй это:
Update AspNetUserRoles
Set AspNetUserRoles.RoleId = a.RoleId
From AspNetUsers as b
Inner Join AspNetUserRoles as a
On a.UserId = b.Id
Where b.Email = '[email protected]'
and a.name = 'name'
MSSQL - я обновил теги, извините за ошибку.