| 

.NET C# Java Javascript Exception

2
Ich habe folgende, vereinfachte Tabellen:

Users
(
ID int,
Name varchar --diese Spalte steht komplett auf NULL
)
UserInfos
(
ID int, --ist dieselbe ID wie bei Users
Name varchar --hier sind Werte drin
)

ich möchte die Users-Tabelle updaten, so dass zu jedem User in der Tabelle jetzt auch der Name eingetragen ist (die Namen stehen momentan auf NULL). Die Namen befinden sich in der Tabelle UserInfos. Man müsste jetzt im Update einen Join wie Users.ID = UserInfos.ID verwenden. Geht Join mit Update?

Hintergrund ist, dass die Daten in zwei Tabellen gespalten vorliegen und ich sie jetzt zusammenfassen will in eine.
09.09.2009
florio 137 1 1 4
jor 791 2 7
3 Antworten
2
Da es hier um MSSQL/T-SQL handelt, geht aber auch
update U set Name=I.Name
from Users U
inner join UsersInfo I on I.id=U.Id
10.09.2009
BeachBlocker 617 3
Hab ja gesagt das es DBMS gibt die Joins im Update unterstützen und MS gehörte schon immer zu denen die ihr eigenes Süppchen köcheln ;).
FalkP 10.09.2009
4
Dafür benötigt man keinen Join, das geht auch mit einer Subquery.
update Users u set
u.Name = (select ui.Name
from UserInfos ui
where ui.ID = u.ID)

Joins in Updates sieht der SQL-Standard nicht vor, obwohl sie von manchen DBMS unterstützt werden.
09.09.2009
FalkP 3,3k 3 8
Kann nur zustimmen! Hier macht nur ein Subselect Sinn und es geht auch am einfachsten ;)
Dustin Klein 10.09.2009
Die Lösung gefällt mir auch gut, aber ich hab Bedenken wegen der Performance. Das Subquery wird doch für jede Zeile nochmal ausgeführt.
florio 10.09.2009
Zumindest für MSSQL 2005 sind deine Bedenken unbegründet und führt wieder auf die Frage http://codekicker.de/fragen/Welche-SQL-Anfrage-ist-performanter-besser/156 "Welche SQL Anfrage ist performanter/besser?". Das DBMS bestimmt den Queryplan nicht der Author und unter normalen Umständen werden beide Statements nahezu identisch abgearbeitet. Bei meinem Test mit einem merge join)
BeachBlocker 10.09.2009
0
Und damit wir alle Möglichkeiten durch haben (nur zur Vollständigkeit):

update Users u set 
u.Name = ui.name
inner join UsersInfo ui
on (ui.id = u.id)
where ui.name is not null
10.09.2009
Martin Bassus 486 1 1 8

Stelle deine Sql-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH