Morjo: MySQL: IDs anpassen - UPDATE und SELECT?

Hallo zusammen,

ich habe 2 Tabellen der Form

tab1:
---------
tab1_id | tab1_name | ...

tab2:
---------
tab2_id | tab2_name | ...

tab1 und tab2 haben in den Spalten _name die gleichen Inhalte, jedoch unterschiedliche Inhalte in den Spalten _id. Ich möchte aus tab2 die IDs in tab1 überführen.

Ist das bereits mit MySQL (mit den Funktionen UPDATE und SELECT) möglich? Was muss ich beachten?

Vielen Dank schonmal im Voraus und noch einen angenehmen Restfeiertag,
Morjo

  1. Hello,

    tab1 und tab2 haben in den Spalten _name die gleichen Inhalte, jedoch unterschiedliche Inhalte in den Spalten _id. Ich möchte aus tab2 die IDs in tab1 überführen.

    Ist das bereits mit MySQL (mit den Funktionen UPDATE und SELECT) möglich? Was muss ich beachten?

    Wenn die Spalte id der Zieltabelle eine "ganz normale Spalte" ist, ist das möglich, wenn sie aber ein Primärschlüssel ist oder auch nur ein Unique Index darauf liegt, kann es Probleme geben.

    Fang doch erstmal mit einer Abfrage an

    select tab1.name, tab2.name, tab1.id, tab2.id from tab1, tab2 where tab1.name = tab2.name

    oder so ähnlich jedenfalls

    dann siehst Du, ob die Werte zusammenpassen.
    Später daraus ein Update-Statement zu machen, ist dann nur noch ein kleiner Schritt, o. Gesagtes natürlich berücksichtigt.

    Harzliche Grüße aus dem
    verschneiten Sankt Andreasberg
    und Frohe Weihnachtszeit

    Tom

    --
    Nur selber lernen macht schlau

    1. Danke für Deine Antwort, Tom.

      Wenn die Spalte id der Zieltabelle eine "ganz normale Spalte" ist, ist das möglich, wenn sie aber ein Primärschlüssel ist oder auch nur ein Unique Index darauf liegt, kann es Probleme geben.

      Die Spalte ist zwar Primärschlüssel, jedoch ist in diesem Kontext die Struktur ohne Belang, da nur die aktualisierten Daten exportiert werden sollen. Notfalls erstelle ich für die Werte eine weitere Spalte.

      Fang doch erstmal mit einer Abfrage an

      select tab1.name, tab2.name, tab1.id, tab2.id from tab1, tab2 where tab1.name = tab2.name

      oder so ähnlich jedenfalls

      dann siehst Du, ob die Werte zusammenpassen.
      Später daraus ein Update-Statement zu machen, ist dann nur noch ein kleiner Schritt, o. Gesagtes natürlich berücksichtigt.

      Genau dieses "Später" interessiert mich ;-)
      Die Werte gehören ganz sicher zusammen. Um es kurz zu verdeutlichen, die Tabellen mit Beispielinhalten:

      tab1:
      ---------
      tab1_id | tab1_name | ...
      --------|-----------|-----
            1 |      eins | ...
            2 |      zwei | ...
            3 |      drei | ...

      tab2:
      ---------
      tab2_id | tab2_name | ...
      --------|-----------|-----
          101 |      eins | ...
          102 |      zwei | ...
          103 |      drei | ...

      tab1 soll jetzt in der Spalte tab_id jeweils die Werte 101, 102 und 103 bekommen.

      Die Frage ist also: welche Operationen benötige ich um die Aktualisierung umzusetzen?

      Beste Grüße,
      Morjo

      1. Hello,

        Fang doch erstmal mit einer Abfrage an

        select tab1.name, tab2.name, tab1.id, tab2.id from tab1, tab2 where tab1.name = tab2.name

        dann siehst Du, ob die Werte zusammenpassen.
        Später daraus ein Update-Statement zu machen, ist dann nur noch ein kleiner Schritt, o. Gesagtes natürlich berücksichtigt.

        Genau dieses "Später" interessiert mich ;-)

        Die Werte gehören ganz sicher zusammen. Um es kurz zu verdeutlichen, die Tabellen mit Beispielinhalten:

        tab1:

        tab1_id tab1_name ...
        1 eins ...
        2 zwei ...
        3 drei ...

        99 |      null | ...

        tab2:

        tab2_id tab2_name ...
        101 eins ...
        102 zwei ...
        103 drei ...

        104 |      zwei | ...

        So, und nun?
        Was passiert mit tab1.id = 99 und mit tab2.id = 104?

        Der eine hat keinen Partner und die Sätze 102 und 104 müssen sich einen teilen aus tab1.
        Was passiert mit ihnen beim Update?

        Ist die Integrität der Daten noch gesichert?

        Solche Fragen klärt man immer vor dem Update. Hinterher ist es zu spät, wenn man nicht noch irgendwo eine aktuelle Datensicherung am besten der gesamten Datenbank hat.

        Harzliche Grüße aus dem
        verschneiten Sankt Andreasberg
        und Frohe Weihnachtszeit

        Tom

        --
        Nur selber lernen macht schlau

        1. Danke für Deine Antwort, Tom.

          Ist die Integrität der Daten noch gesichert?

          Solche Fragen klärt man immer vor dem Update. Hinterher ist es zu spät, wenn man nicht noch irgendwo eine aktuelle Datensicherung am besten der gesamten Datenbank hat.

          Wie erwähnt muss ich mir für diesen Part keine Sorgen machen. Kurzum: die Integrität ist gesichert!

          Fakt ist auch, dass in tab2 weitaus mehr Begriffe stehen als in tab1. Keiner dieser Begriffe kommt jeweils in einer Tabelle doppelt vor. Diese Begriffe könnten also an sich auch Primärschlüssel sein.