Innerhalb von Tabelle Daten kopieren

fridi

Neuer Benutzer
Beiträge
2
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?
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.520
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.


Weiss einer wie ich das machen kann?

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
 

ukulele

Datenbank-Guru
Beiträge
4.637
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 :)
 

fridi

Neuer Benutzer
Beiträge
2
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.

t1.language = 2 als Bedingung mit aufnehmen
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
 

akretschmer

Datenbank-Guru
Beiträge
9.520
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?

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

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;

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

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

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
 
Werbung:
Oben