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

Relationstabellen zusammenführen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von struunz88, 1 November 2015.

  1. struunz88

    struunz88 Neuer Benutzer

    Hallo,

    habe ein Problem mit meiner DB ich hab auch schon nach Lösungen gesucht und rum probiert aber irgendwie klappt es nicht so wie es soll.

    Folgendes Problem ich habe eine Datenbank mit 2 Tabellen, die ich zusammenfügen möchte.

    [​IMG]

    Ich muss also die Passende ID und den Titel aus der ersten Tabelle in die zweite einfügen und da klappt es bei mir nicht warum auch immer :(

    Hoffe es hat einer ne Lösung
    Danke schon mal :)
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Gähn.

    Code:
    est=*# create table t2 (id int primary key, t text);
    CREATE TABLE
    test=*# create table t1 (id int, titel text, key_t2 int references t2);
    CREATE TABLE
    test=*# copy t2 from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 388  interessantes zu hans
    >> 178  interessantes zu peter
    >> 111  interessantes zu inge
    >> \.
    COPY 3
    test=*# copy t1 from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 1  hans  388
    >> 2  peter  178
    >> 3  inge  111
    >> \.
    COPY 3
    test=*# select t2.id, t2.t, t1.id, t1.titel from t2 left join t1 on t2.id=t1.key_t2;
     id  |  t  | id | titel
    -----+------------------------+----+-------
     388 | interessantes zu hans  |  1 | hans
     178 | interessantes zu peter |  2 | peter
     111 | interessantes zu inge  |  3 | inge
    (3 rows)
    
    beschäftige dich dringend mit Grundlagen wie z.B. Joins.
     
  3. struunz88

    struunz88 Neuer Benutzer

    Also ich habe das jetzt mal gemacht bzw. nur den Teil
    Code:
    select t2.id, t2.t, t1.id, t1.titel from t2 left join t1 on t2.id=t1.key_t2
    Aber wenn ich das so mache zeigt er mir zwar an wie es aussehen soll aber die Original Tabelle wird nicht verändert und wenn ich das richtig sehe steht oben auch CREATE TABLE .... genau das möchte ich nicht da es zu lange dauern würde. Das sind ca. 4 Mio Einträge mit knapp 18 GB in der zweiten Tabelle mit dem Text . Deswegen soll da nur die ID und Titelspalte eingefügt werden.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Die Create Table - Befehle bei mir dienen lediglich dazu, die Tabellen wie Du sie hast zu erstellen.

    Warum willst Du die original Tabellen verändern? Du kannst Dir einen View erstellen, der auf der Abfrage basiert. Hättest Du eine richtige DB, so könntest Du auch einen materialized View erstellen. Du kannst auch eine neue Tabelle als Resultat erstellen - create table ... as ... Die Struktur einer solchen Tabelle wie von Dir gezeigt wäre aber auch Quatsch, die ID-Spalten in dieser wäre unnütz.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    weil du es bist:

    Code:
    test=*# alter table t2 add column id_t1 int;
    ALTER TABLE
    test=*# alter table t2 add column titel_t1 text;
    ALTER TABLE
    test=*# select * from t1;
     id | titel | key_t2
    ----+-------+--------
      1 | hans  |  388
      2 | peter |  178
      3 | inge  |  111
    (3 rows)
    
    test=*# select * from t2;
     id  |  t  | id_t1 | titel_t1
    -----+------------------------+-------+----------
     388 | interessantes zu hans  |  |
     178 | interessantes zu peter |  |
     111 | interessantes zu inge  |  |
    (3 rows)
    test=*# update t2 set id_t1=t1.id, titel_t1 = t1.titel from t1 where t2.id=key_t2;
    UPDATE 3
    test=*# select * from t2;
     id  |  t  | id_t1 | titel_t1
    -----+------------------------+-------+----------
     388 | interessantes zu hans  |  1 | hans
     178 | interessantes zu peter |  2 | peter
     111 | interessantes zu inge  |  3 | inge
    (3 rows)
    
    Über Sinn oder Unsinn kannst selber entscheiden.
     
  6. struunz88

    struunz88 Neuer Benutzer

    Hm gibt immer ne Fehlermeldung ... hab jetzt gedacht ich hab mich vertippt oder sonst was nicht beachtet deswegen habe ich auch mal die 2 Tabellen so angelegt weil die ja bei mir eigentlich andere Namen und son zeugs haben aber auch dann :(

    Was du eben mit dem View meintest ... kann ich den abspeichern und nachher wie auf eine ganz normale Tabelle zugreifen, also auch über PHP ? Weil das könnte schon mal ein anderes Problem lösen :D
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Kann sein, daß die von mir gezeigten SQL-Befehle unter MySQL nicht funktionieren. Das ist durchaus normal, ich verwende PostgreSQL, MySQL kann gefühlt zu 99% nicht das, was in PostgreSQL geht.

    Ein VIEW ist ein 'Alias' für ein SQL. Beim Zugriff auf den View wird das zugrunde liegende SQL ausgeführt. Ausnahme: materialised Views. Kann MySQL icht.
     
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