Sql server 用另一个表值更新一个表列值的SQL Server查询

Sql server 用另一个表值更新一个表列值的SQL Server查询,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我想从另一个表更新一个表的列值。我有两个表,即用户,UserProfile我在两个表中都有MobileNumber列。所以我想从UserProfile更新Users表中的手机号码。UserProfile表中可能存在重复的mobilenumber。所以我想避免Users表中的重复值。如果已经存在MobileNumber,则无需更新 这是我的查询 update Users set MobileNumber = up.MobileNumber from Users u left join User

我想从另一个表更新一个表的列值。我有两个表,即
用户,UserProfile
我在两个表中都有
MobileNumber
列。所以我想从
UserProfile
更新
Users
表中的手机号码。
UserProfile
表中可能存在重复的mobilenumber。所以我想避免
Users
表中的重复值。如果已经存在
MobileNumber
,则无需更新

这是我的
查询

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
表中,有一些记录在
MobileNumber
中包含
Null
值。如何在没有重复项的情况下更新此列?

合并将帮助您:

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
,您获得的MobileNumber数超过1,则必须将
选择不同的userid,MobileNumber从UserProfile中MobileNumber不为NULL的部分更改为类似的
选择不同的userid,MAX(MobileNumber)从UserProfile(其中MobileNumber不为NULL)按用户ID分组,或者编写自己的查询来选择所需内容。

最终我得到了解决方案

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

您的查询非常有效。您面临的问题在哪里?@AjayA请澄清。Users中每个用户是否有一条记录,UserProfile中每个用户是否有许多记录?@P.Salmon很抱歉混淆。在userprofile表中,多个用户的mobilenumber可能相同。在UserProfile中,对于单个用户只有一条记录,如
user.UserId=UserProfile.UserId
您将只找到一条记录。@P.Salmon&@akash更新
MobileNumber
时,我想检查
MobileNumber
表中是否不存在此
MobileNumber
。如果存在不需要更新。谢谢回复。我尝试了你的ans。但它仍在为用户在
Users
表中添加重复的手机号码。在
Users&UserProfile
中,单个用户只有一条记录,如
user.UserId=UserProfile.UserId
您只能找到一条记录。但userprofile表中的许多用户的手机号码可能相同。更新
MobileNumber
时,我想检查
MobileNumber
表中是否不存在此
MobileNumber
。如果存在,则不需要更新。然后将exists语句添加到源查询。或者尝试使用我的答案中的查询,我已经编辑了答案谢谢您的快速回复。我试过你的新问题。但结果集
0行受影响
可能内部联接未按预期工作。现在试试看,我换了queryGreat,你找到答案了!:)