2016-05-14 22 views
1

one tableのカラム値をanother tableから更新します。私は2つのテーブルすなわちUsers, UserProfileを持っています。どちらのテーブルにもMobileNumberというカラムがあります。そこでUsersテーブルの携帯電話番号をUserProfileから更新したいと思います。 UserProfileテーブルにmobilenumberが重複している可能性があります。だから私は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にあります。重複することなくこの列を更新するにはどうすればよいですか?

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, MAX(MobileNumber) FROM UserProfile WHERE MobileNumber IS NOT NULL GROUP BY UserIDような何かにSELECT DISTINCT UserID, MobileNumber FROM UserProfile WHERE MobileNumber IS NOT NULL一部を変更したり、あなたが必要なものを選択したために、独自のクエリを記述する必要があります。

+1

を得ました。あなたが直面している問題はどこですか@Ajay –

+0

明確化してください。 Userには1レコードが、UserProfileには1ユーザーあたり多くのレコードがありますか? –

+0

@ P.Salmon混乱して申し訳ありません。 userprofileテーブルでは、複数のユーザーに対してmobilenumberが同じである可能性があります。 UserProfileには、 'User.UserId = UserProfile.UserId'のような単一のレコードしかありません。レコードは1つしかありません。 –

答えて

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がお手伝いします。

+0

返信ありがとうございます。私はあなたのansを試みた。それでもユーザーのために 'Users'テーブルに重複した携帯番号を追加しています。 'Users&UserProfile'には' User.UserId = UserProfile.UserId'のような単一のレコードしかありません。あなたは一つのレコードしか見つけられません。しかし、携帯電話番号は、userprofileテーブルの多くのユーザーにとって同じである可能性があります。 –

+0

'MobileNumber'を更新するときに気象をチェックしたいと思います。この' MobileNumber'は 'User'テーブルにはまだ存在しません。存在しない場合は更新する必要はありません。 –

+0

次に、ソースクエリにEXISTS文を追加します。または私の答えからクエリを使用しようとすると、私は答えを編集しました – gofr1

関連する問題