Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MSSQL: Suchen und Ersetzten ABER durch (Verweis)tabelle

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MysterioJN, 8 Februar 2017.

  1. MysterioJN

    MysterioJN Datenbank-Guru

    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 :)
     
  2. MysterioJN

    MysterioJN Datenbank-Guru

    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
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
  4. drdimitri

    drdimitri Datenbank-Guru

    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.
     
  5. ukulele

    ukulele Datenbank-Guru

    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.
     
  6. MysterioJN

    MysterioJN Datenbank-Guru

    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!!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden