2016-05-14 106 views
1

我想从another table更新one table列值。我有两个表,即Users, UserProfile我在这两个表中有MobileNumber列。所以我想从UserProfile更新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表中有一些记录,其中包含NullMobileNumber。我如何更新此列而不重复?

+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; 

但是,如果你对某些userid的得到更多的则1 MobileNumber必须更改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