MSSQL: Suchen und Ersetzten ABER durch (Verweis)tabelle

MysterioJN

SQL-Guru
Beiträge
158
Tach zusammen,

ich kenne den Befehl:

UPDATE tabelle SET spalte = REPLACE(spalte,‘ZU-SUCHENDER-WERT‘,‘ZU-ERSETZENDER-WERT‘)


Wenn ich aber jetzt nicht jeden ‘ZU-SUCHENDER-WERT‘ und "ZU-ERSETZENDER-WERT‘ manuell eingeben möchte, sondern auf eine Hilfstabelle verweisen möchte, weiß ich nicht wie ich das anstelle.


Also im Grundegenommen ein Sverweis, der den Inhalt in der Spalte AG der Tabelle "1" mit dem dazu passenden Wert aus Tabelle "2" austauscht:

Tabelle: "1";
Spalte: AG
Inhalt:
A,
B,
C,
B,
usw.

Hilfstabelle: "2";
Spalte: AG, Name
Inhalt:
A, Landwirtschaft
B, Ernährung
C, Presse


Ergebnis soll dann von Tabelle "1" sein:
Statt A nun Landwirtschaft
Statt B nun Ernährung
Statt C nun Presse


Hab mich ganz dämlich ausgedrückt. Hoffe jemand versteht mein Anliegen. Ist sicherlich nicht schwer, aber ich check es nicht :)
 
Werbung:
Und eine weiter Frage gleichen Themas:

Ich möchte in Tabelle A wenn in spalte 1 ein bestimmter Wert steht, einen bestimmten Text in Spalte 2 schreiben lassen.


Beispiel:

Tabelle A
Spalte A
1
2
3

In Spalte B soll er mir nun z.B. wenn in Spalte A = 1 dann B = Auto usw.

Als Select weiß ich das, aber mit update hab ich schon immer Probleme gehabt...

Select
SpalteA,
Case when SpalteA = 1 THEN 'Auto' Else '' END AS SpalteB
FROM TabelleA
 
Könnte so aussehen (also dem zweiten Post nach):
Code:
UPDATE   tabelle1
SET     tabelle1.AG = tabelle2.Name
FROM   tabelle1
INNER JOIN tabelle2
ON     tabelle1.AG = tabelle2.AG
Das ließe sich eventuell auch im ersten Fall mit replace() anwenden, allerdings nur wenn es eine klare Join Condition gibt. Mit einem Cross-Join bin ich mir jetzt nicht sicher ob das so auf anhieb läuft.
 
Ich glaub den Join so zu platzieren ist MSSQL spezifisch, da kenn ich die Syntax nicht.
Auf jeden Fall würde in einem Update mit correlierter Subquery die Spalten die nicht durch den Join abgedeckt sind auf NULL gesetzt werden.
Wenn man das nicht will (und meistens ist das so) muss also noch eine ergänzende WHERE Bedingung her, die die zu ändernden Daten entsprechend einschränkt.
 
Ja ist glaube ich MSSQL spezifisch aber wir sind auch im MSSQL-Forum da darf man das mal :) MySQL kann es sowieso nicht wegen Selbstbezug, für die anderen könnte man es aber auch umstellen.
Code:
UPDATE   tabelle1
SET     tabelle1.AG = isnull(

SELECT   t2.Name
FROM   tabelle1 t1
INNER JOIN tabelle2 t2
ON     t1.AG = t2.AG
WHERE   t1.pk = tabelle1.pk

     ),tabelle1.AG)
Im ersten Post von mir handelt es sich um einen INNER JOIN, NULL könnte nur gesetzt werden wenn in tabelle2 zwar "AG" gefunden wird aber "Name" NULL ist. Das könnte man noch mit WHERE Abfangen richtig.

In diesem Code hab ich es mit isnull() gemacht, da wird er aber alle Datensätze anfassen auch wenn im Subselect nichts geliefert wird. Daher finde ich Variante #1 eleganter auch wenn sie MSSQL spezifisch ist.
 
Werbung:
Klasse dank euch. Habs nun drauf:

Hier mit Join zu anderen Tabellen:

UPDATE
zubearbeitende Tabelle
SET
zubearbeitende Tabelle.zufüllendesFeld = andere tabelle.herkunftspalte
FROM
tabelle
INNER JOIN
andere tabelle
ON
andere tabelle.referenz = zubearbeitende tabelle.referenz
WHERE
blablabla


Oder by "suche / ersetze"


UPDATE tabelle SET spalte = REPLACE(spalte,‘ZU-SUCHENDER-WERT‘,‘ZU-ERSETZENDER-WERT‘)


Oder by "suche / ersetzte" wenn Null:

UPDATE tabelle SET spalte = wasauchimmer WHERE bedingung IS NULL



Hilft mir ordentlich weiter bei der inhaltlichen Feldbearbeitung von etwas mehr als 17k Datensätzen.

Schönes Wochenende euch!!
 
Zurück
Oben