2016-05-14 3 views
1

Ich möchte Update one table Spaltenwert von another table. Ich habe zwei Tabelle, d. H. Users, UserProfile Ich habe MobileNumber Spalte in beiden Tabellen. So möchte ich Users Tabelle Handynummer von UserProfile aktualisieren. Möglicherweise gibt es eine doppelte Mobilnummer in UserProfile Tabelle. So möchte ich doppelten Wert in Users Tabelle vermeiden. Wenn es bereits MobileNumber gibt, dann brauchen Sie nicht zu aktualisieren.SQL Server-Abfrage zum Aktualisieren eines Tabellenspaltenwerts mit einem anderen Tabellenwert

Hier ist meine 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); 

Aber es ist nicht richtig funktioniert. In UserProfile Tabelle gibt es einige Datensätze, die Null Wert in MobileNumber enthält. Wie kann ich diese Spalte ohne Duplikate aktualisieren?

+1

Ihre Anfrage perfekt funktioniert. Wo ist das Problem, das Sie gegenüberstehen. @ Ajay –

+0

Eine Klarstellung bitte. Gibt es einen Datensatz pro Benutzer in Benutzer und viele Datensätze pro Benutzer in UserProfile? –

+0

@ P. Salmon Sorry für Verwirrung. In der Benutzerprofiltabelle kann die Mobiltelefonnummer für mehrere Benutzer gleich sein. In UserProfile gibt es nur einen Datensatz für einen einzelnen Benutzer wie 'User.UserId = UserProfile.UserId' Sie werden nur einen Datensatz finden. –

Antwort

1

Endlich habe ich Lösung

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

Großartig, Sie finden die Antwort! :) – gofr1

0

MERGE wird Ihnen helfen:

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; 

Aber wenn Sie mehr als 1 MobileNumber für einige userid ‚s got müssen Sie SELECT DISTINCT UserID, MobileNumber FROM UserProfile WHERE MobileNumber IS NOT NULL Teil zu etwas wie das SELECT DISTINCT UserID, MAX(MobileNumber) FROM UserProfile WHERE MobileNumber IS NOT NULL GROUP BY UserID oder schreiben Sie Ihre eigene Abfrage ändern zu wählen, was Sie brauchen.

+0

Danke für die Antwort. Ich habe es versucht. aber es fügt immer noch doppelte Handynummer in 'Users' Tabelle für Benutzer hinzu. In 'Users & UserProfile' gibt es nur einen Datensatz für einen einzelnen Benutzer wie' User.UserId = UserProfile.UserId' Sie werden nur einen Datensatz finden. Die Mobilfunknummer kann jedoch für viele Benutzer in der Benutzerprofiltabelle gleich sein. –

+0

Beim Aktualisieren von 'MobileNumber' möchte ich prüfen, ob diese' MobileNumber' nicht bereits in der 'Benutzer'-Tabelle vorhanden ist. Wenn vorhanden, muss nicht aktualisiert werden. –

+0

Fügen Sie dann EXISTS-Anweisung zur Quellabfrage hinzu. Oder versuchen Sie, Abfrage von meiner Antwort zu verwenden, habe ich die Antwort bearbeitet – gofr1

Verwandte Themen