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

Daten aus einem Feld einer Tabelle einer Datenbank in ein Feld einer Tabelle ein anderen Datenbak ko

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von pedroNegro, 13 April 2012.

  1. pedroNegro

    pedroNegro Benutzer

    hiilfe,

    ich versuche die Inhalte einer Spalte einer Tabelle einer DB in eine Spalte einer anderen Tabelle in einer anderen Datenbak zu kopieren oder auch exportieren.
    Habe schon zwei Lösungsansätze verfolgt:
    1.
    Insert INTO [Tabellename1] (Spaltenname1) SELECT Spaltenname2 FROM [Datenbank2].dbo.[Tabellenname2]
    WHERE (ID) = [Datenbank2].dbo.[Tabellenname2].ID

    2.
    UPDATE [Tabellename1]
    SET (Spaltenname1) = [Datenbank2].dbo.[Tabellenname2].Spaltenname2
    WHERE (ID) = [Datenbank2].dbo.[Tabellenname2].ID

    Das Kopieren soll einmalig sein.

    Danke vorab.
     
  2. Charly

    Charly Datenbank-Guru

    Hallo pedroNegro,

    da du IDs vergleichst sind schon Daten in beiden Datenbanken vorhanden.

    Wenn die IDs in beiden Tabellen nich 100% übereinstimmen musst Du mit beiden Befehlen arbeiten.
    Dabei solltest Du aber beim INSERT das komplette Tupel aus Datenbank1 einfügen.
    Das INSERT muss dann nur IDs einfügen die noch nicht vorhanden sind.

    WHERE tbl1.spalte1 NOT IN (SELECT Spalte2 FROM db2.tbl2).

    Wenn Du nur die vorhandenen Tupel aktualisieren willst reicht ein UPDATE.

    Der Standard würde noch MERGE INTO erlauben. Das wird, soweit ich weis, aber nicht von mySQL unterstützt.

    Gruß Charly
     
    Walter gefällt das.
  3. pedroNegro

    pedroNegro Benutzer

    Hi Charly,

    vielen dank für Deine Antwort.
    Ich habe mich da etwas falsch ausgedrückt. Es handelt sich nicht um die ID, das war nur exemplarisch und deshalb leicht missverständlich. Das gebe ich zu.

    Gemeint ist das Kopieren der Inhalte von Tb2 auf der Db2 in die Tb1 auf Db1 unter Berücksichtigung der Werte in der Spalte3 (welche in beiden Tabellen auf beiden DB mit identischen Werten existiert)

    Insert INTO [Tb1] (Spalten1) SELECT Spalten2 FROM [Db2].dbo.[Tb2]
    WHERE (Spalte3) = [Db2].dbo.[Tb2].Spalte3

    Hast Du noch eine Idee?
     
  4. Charly

    Charly Datenbank-Guru

    Insert ist nur dafür gedacht neue Zeilen in eine Tabelle einzufügen.

    Du musst bei vorhandenen Zeilen immer mit Update arbeiten.

    Wo die Tabellen liegen ist erstmal egal.

    Code:
    UPDATE Tb1
    SET Spalte1 = (
       SELECT Tb2.Spalte2 FROM Tb2
       WHERE Tb2.Spalte3 = Tb1.Spalte3)
    
    Hierbei wird für jede Zeile in Tb1 geprüft ob eine entsprechende Zeile in Tb2 vorhanden ist (Vergleich der Spalte3)
    und bei einem positiven Ergebnis Tb1.Spalte1 aktualisiert (Die Unterabfrage gibt einen Wert zurück).
    Tb2.Spalte3 sollte bei dieser Variante eindeutig sein.

    Gruß Charly
     
  5. pedroNegro

    pedroNegro Benutzer

    Moin,
    danke Charly, war am Freitag leider schon im Wochenende.

    Die beiden Tabellen liegen in unterschiedlichen Datenbanken auf einem DB Server.

    Folgendes habe ich probiert:

    Code:
    UPDATE Tb1
    SET Spalte1 = [
    SELECT Tb2.Spalte 2 from [Db2].dbo.[Tb2]
    WHERE [Db2].dbo.[Tb2].Spalte3 = Tb1.Spalte3
    Fehlermeldung: Syntax Fehler in der Nähe von Spalte3
     
  6. pedroNegro

    pedroNegro Benutzer

    Hallo Charly,

    ich habs:

    Code:
    UPDATE Db1.dbo.Tb1
    SET Spalte1=Spalte2
    FROM Db2.dbo.Tb2 a, Db1.dbo.Tb1 r
    WHERE a.Spalte3 = r.Spalte3
    Hinzu kommt noch, dass die Sortierreihenfolgen (COLLATE) unterschiedlich waren.
    Jetzt funzt es aber.

    Nochmal vielen Dank und bis demnächst.
    Gruß, pedro
     
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