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,你找到答案了!:)