2016-05-14 4 views
1

Я хочу обновить значение one table значение столбца от another table. У меня две таблицы, то есть Users, UserProfile У меня есть столбец MobileNumber в обеих таблицах. Поэтому я хочу обновить Users таблицу мобильного телефона от UserProfile. В таблице может быть дублировано мобильное число. Поэтому я хочу избежать дублирования значения в таблице Users. Если уже существует MobileNumber, то нет необходимости обновлять.Запрос SQL Server для обновления одного значения столбца таблицы с другим значением таблицы

Вот мой query

update Users 
set MobileNumber = up.MobileNumber 
from Users u 
left join UserProfile up on u.UserID = up.UserID 
where up.MobileNumber not in (select ISNULL(MobileNumber, '') from Users); 

Но он не работает правильно. В таблице UserProfile есть некоторые записи, которые содержат Null значение в MobileNumber. Как я могу обновить этот столбец без дубликатов?

+1

Ваш запрос работает отлично. Где проблема, с которой вы столкнулись. @ Ajay –

+0

Прояснение пожалуйста. Есть ли 1 запись на пользователя в Пользователях и много записей на пользователя в UserProfile? –

+0

@ P.Salmon Извините за путаницу. В таблице userprofile mobilenumber может быть одинаковой для нескольких пользователей. В UserProfile существует только одна запись для одного пользователя, например 'User.UserId = UserProfile.UserId', вы найдете только одну запись. –

ответ

1

Наконец я получил решение

Update u set u.MobileNumber = up.MobileNumber 
FROM Users u 
JOIN(
SELECT MobileNumber, MIn(UserId) AS UsID FROm UserProfile 
group by MobileNumber 
) up 
on u.UserID = up.UsID 
+0

Отлично, вы найдете ответ! :) – gofr1

0

MERGE поможет вам:

MERGE Users as target 
USING (
    SELECT DISTINCT up.UserID, up.MobileNumber 
    FROM UserProfile up 
    WHERE up.MobileNumber NOT IN (SELECT MobileNumber FROM Users WHERE MobileNumber IS NOT NULL)) as source 
ON target.UserID = source.UserID 
WHEN MATCHED AND target.MobileNumber IS NULL THEN 
    UPDATE SET MobileNumber = source.MobileNumber; 

Но если вы получили более 1 MobileNumber для некоторых userid «s вы должны изменить SELECT DISTINCT UserID, MobileNumber FROM UserProfile WHERE MobileNumber IS NOT NULL части что-то вроде этого SELECT DISTINCT UserID, MAX(MobileNumber) FROM UserProfile WHERE MobileNumber IS NOT NULL GROUP BY UserID или написать свой собственный запрос, чтобы выбрать то, что вам нужно.

+0

Спасибо за ответ. Я попробовал свои азартные игры. но он по-прежнему добавляет повторяющийся номер мобильного телефона в таблицу «Пользователи» для пользователя. В «Users & UserProfile» есть только одна запись для одного пользователя, например «User.UserId = UserProfile.UserId», вы найдете только одну запись. Но мобильный номер может быть одинаковым для многих пользователей в таблице userprofile. –

+0

При обновлении 'MobileNumber' я хочу проверить погоду, этот' MobileNumber' еще не существует в таблице 'User'. Если нет необходимости обновлять. –

+0

Затем добавьте инструкцию EXISTS к исходному запросу. Или попробуйте использовать запрос из моего ответа, я отредактировал ответ – gofr1

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