2016-05-09 3 views
1

У меня есть эти таблицы:TSQL: Как обновить это поле

Users 
    Id (PK) 
    NationalCode 

UserProfiles 
    UserProfileId (PK) One to One with Users 
    SalaryAmount 

Salaries 
    NationalCode 
    SalaryAmount 

Я хочу обновить SalaryAmount для каждого пользователя внутри UserProfiles с новым в окладах. Как я могу это сделать?

Я попытался это:

UPDATE Users 
SET SalaryAmount = t2.Salary 
FROM Users t1 
INNER JOIN Salaries t2 ON t1.NationalCode = t2.NationalCode 
GO 

Приведенный выше код работает, если SalaryAmount быть внутри Users, но как вы можете видеть SalaryAmount внутри UserProfiles.

+0

затем присоединиться к '' Users' с UserProfiles' вместо – Lamak

+0

@Lamak вы имеете в виду что-то вроде этого? 'UPDATE UserProfiles SET SalaryAmount = t2.Salary ИЗ UserProfiles t1 INNER JOIN Пользователи t3 ON t1.UserProfileId = t3.Id INNER JOIN Лист1 $ t2 ON t3.NationalCode = t2.Nationalcode GO' – newbie

ответ

0

Все, что вам нужно, это еще один присоединиться на `UserProfiles:

UPDATE up 
SET up.SalaryAmount = s.Salary 
FROM UsersProfiles up 
JOIN Users u on up.UserProfileId = u.Id 
JOIN Salaries s ON u.NationalCode = s.NationalCode 
0
UPDATE up 
SET up.SalaryAmount = t2.Salary 
FROM UserProfiles up 
INNER JOIN Users t1 ON t1.Id = up.UserProfileId 
INNER JOIN Salaries t2 ON t1.NationalCode = t2.NationalCode 
GO 

Это то, что вам нужно? Я бы порекомендовал вам сделать UserProfileId столбец должен быть уникальным в таблице UserProfiles и уникальный идентификатор-магазин Users игровая в колонке UserId которая является Foreign Key для таблицы Users

0
UPDATE U 
SET U.SalaryAmount = S.SalaryAmount 
FROM 
    Userprofiles U 
    INNER JOIN Users R ON U.UserprofileID = R.ID 
    INNER JOIN Salaries S ON R.NationalCode = S.NationalCode 
WHERE 
    U.SalaryAmount <> S.SalaryAmount 
+0

Пожалуйста, добавьте некоторые пояснения, как почему это устраняет проблему вопросника, а не только образец кода, чтобы помочь им понять это. – AlBlue

Смежные вопросы