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

Innerhalb von Tabelle Daten kopieren

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von fridi, 13 März 2013.

  1. fridi

    fridi Neuer Benutzer

    Hallo Leute,
    ich bin in SQL nicht so bewandert und kriege folgendes auch nicht hin:
    Ich habe eine Tabelle mit Produkten, jedes Produkt auf deutsch und auf englisch, das gleiche Produkt hat die gleiche id. Nun fehlt bei englisch die Produktbeschreibung - und hier soll die deutsche übernommen werden.

    Wie kann ich das per SQL Befehl realisieren, habe schon mehreres mit Select, Insert und Where ausprobiert - aber nicht hinbekommen.

    Also der text von language 1 soll jeweils in die spalte text kopiert werden - da wo es 1. die gleiche id gibt und 2. wo die language = 2 ist.

    Tabelle products bisher:
    ---------------------------------
    | id | language | text |
    --------------------------------
    | 1 | 1 | text1 |
    | 1 | 2 | |
    | 2 | 1 | text2 |
    | 2 | 2 | |
    | 3 | 1 | text3 |
    | 3 | 2 | |
    | 4 | 1 | text4 |
    | 4 | 2 | |
    | 5 | 1 | text5 |
    | 5 | 2 | |
    | 6 | 1 | text6 |
    | 6 | 2 | |
    -------------------------------

    und so soll es werden
    ---------------------------------
    | id | language | text |
    --------------------------------
    | 1 | 1 | text1 |
    | 1 | 2 | text1 |
    | 2 | 1 | text2 |
    | 2 | 2 | text2 |
    | 3 | 1 | text3 |
    | 3 | 2 | text3 |
    | 4 | 1 | text4 |
    | 4 | 2 | text4 |
    | 5 | 1 | text5 |
    | 5 | 2 | text5 |
    | 6 | 1 | text6 |
    | 6 | 2 | text6 |
    -------------------------------

    Weiss einer wie ich das machen kann?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Nein.

    Code:
    test=# select * from fridi ;
     id | language |  txt
    ----+----------+-------
      1 |        1 | text1
      1 |        2 |
      2 |        1 | text2
      2 |        2 |
      3 |        1 | text3
      3 |        2 |
    (6 rows)
    
    test=*# update fridi set txt = t2.txt from fridi t2 where fridi.id=t2.id and t2.language = 1;
    UPDATE 6
    test=*# select * from fridi ;
     id | language |  txt
    ----+----------+-------
      1 |        1 | text1
      1 |        2 | text1
      2 |        1 | text2
      2 |        2 | text2
      3 |        1 | text3
      3 |        2 | text3
    (6 rows)
    
    Andreas
     
  3. ukulele

    ukulele Datenbank-Guru

    Ich würde vieleicht noch t1.language = 2 als Bedingung mit aufnehmen um nicht mehr zu schreiben als notwendig. Außerdem solltest du unbedingt ein Backup machen bei solchen Dingen schließlich weiß man bei MySQL nie so genau was bei raus kommt :)
     
  4. fridi

    fridi Neuer Benutzer

    Danke Andreas und Ukulele für die Hinweise, so ganz schnall ich das noch nicht.
    (You have an error in your SQL syntax)

    t2 ? steht das für tabelle 2? Es ist ja die gleiche Tabelle. Soll das t2 so bleiben oder nochmal mit dem Tabellennamen ersetzen?

    Meine Version mit t2 (funktioniert nicht):
    Code:
    UPDATE tabellenname SET txt = t2.txt FROM tabellenname t2 WHERE tabellenname.id=t2.id and t2.language = 1;
    oder t2 mit tabellenname ersetzt: (funktioniert auch nicht):
    Code:
    UPDATE tabellenname SET txt = tabellenname.txt FROM tabellenname tabellenname WHERE tabellenname.id=tabellenname.id AND tabellenname.language = 1;
    Ja ich hab mir extra eine zweite sql Datenbank aufgespielt zum testen.

    wie mach ich das? so?:
    Code:
    UPDATE tabellenname SET txt = tabellenname.txt FROM tabellenname tabellenname WHERE tabellenname.id=tabellenname.id AND tabellenname.language = 1 AND tabellenname.language = 2;
    Fridi
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Ja, ist ein Alias für die Tabelle, da diese ja 2-mal auftaucht und man die richtige in den Conditions angeben muß.

    Nun ja, ich nutze PG, kann sein, daß MySQL da Dinge nicht versteht.

    So in etwa, nur ist es relativ spaßfrei, als Alias wieder den Tabellennamen zu nutzen, das sind unnütze Nebelkerzen. Nun hat man 3 Tabellen ...

    Andreas
     
  6. ukulele

    ukulele Datenbank-Guru

    Und du musst natürlich auch txt durch den Spaltennamen der tatsächlichen Spalte ersetzen.
     
    akretschmer gefällt das.
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