mysql Statement gesucht
Franco
- datenbank
0 bleicher0 Franco0 Vinzenz Mai0 Franco0 Ilja0 Benjamin Buxbaum0 Ilja
0 Felix Riesterer
Hallo Mitstreiter,
ich nutze mysql 5. Ich möchte die Spalte namens Spalte_1 in meiner Tabelle_1 updaten.
Die Werte, die nun eingesetzt werden sollen, stehen in Tabelle_2 in Spalte_1.
In beiden Tabellen gibt es eine Spalte_2, die jeweils denselben (unique) Wert je Datensatz beinhaltet.
Ich suche also ein Statement, das in etwa folgendes aussagt:
Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.
Kann man das so machen oder sollte ich lieber über ein php-script dioeses Vorhaben realisieren?
Güße, Franco
Grüße,
Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.
jaa? was genau hindert dich daran eben das zu machen?
afaik wird es sogar funktionieren
MFG
bleicher
Grüße,
Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.
jaa? was genau hindert dich daran eben das zu machen?
afaik wird es sogar funktionieren
MFG
bleicher
Hallo bleicher,
ich bekomms nicht in ein Statement umgesetzt. Irgendwie hab ichs heute nicht mit Subselects und Konsorten. Brett vorm Kopf, weißt?
Grüße, Franco
Hallo,
Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.
jaa? was genau hindert dich daran eben das zu machen?
ich bekomms nicht in ein Statement umgesetzt. Irgendwie hab ichs heute nicht mit Subselects und Konsorten. Brett vorm Kopf, weißt?
Ilja würde vermutlich ein Subselect vorschlagen, ich einen INNER JOIN von Tabelle1 und Tabelle2. Wenn Du den implizit schreibst, ...
... was hindert Dich daran, das da
Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.
wortwörtlich in SQL zu übersetzen?
[link:http://dev.mysql.com/doc/refman/5.1/en/update.html@title=UPDATE] -- Update
Tabelle_1 t1, -- (Aliasnamen aus Bequemlichkeit)
-- Tabelle1
Tabelle_2 t2 -- die zweite Tabelle brauchst Du auch
-- (obwohl Du nur die erste updatest)
SET -- set
t1.Spalte_1 = t2.Spalte_1 -- Spalte_1=Wert_aus_Tabelle_2_Spalte_1
WHERE -- where
t1.Spalte_2 = t2.Spalte_2 -- Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2
Das ist nun wirklich kein Hexenwerk. Abgesehen von dem Eingeklammerten steht in den Kommentaren genau das, was Du bereits geliefert hast.
Freundliche Grüße
Vinzenz
Hallo Vincent,
vielen Danke für Deine Hilfe und die Erklärung dazu.
Ilja würde vermutlich ein Subselect vorschlagen, ich einen INNER JOIN von Tabelle1 und Tabelle2.
Könntest Du mir die Subselect-Lösung auch noch verraten? Ich möchte die beiden gerne miteinander vergleichen.
Das ist nun wirklich kein Hexenwerk. Abgesehen von dem Eingeklammerten steht in den Kommentaren genau das, was Du bereits geliefert hast.
Ich war mir einfach rein syntaktisch unsicher. Ich wußte z.B. auch nicht, dass ich die 2. Tabelle schon mit ins update einbeziehen muss, obwohl ich nur die erste update. Da fehlt mir einfach ein bisschen Erfahrung oder Übung.
Grüße von Franco
moin,
Könntest Du mir die Subselect-Lösung auch noch verraten? Ich möchte die beiden gerne miteinander vergleichen.
die JOIN variante finde ich hier gar nicht so schlecht, aber ich gebe dir gerne eine variante mit einer korrelierten unterabfrage.
UPDATE Tabelle_1 t1 SET t1.Spalte_1 = (SELECT t2.Spalte_1
FROM Tabelle_2 t2
t2.Spalte_2 = t1.Spalte_2
)
WHERE EXISTS (SELECT NULL
FROM Tabelle_2 t2
t2.Spalte_2 = t1.Spalte_2
)
;
Ilja
Hi Ilja!
UPDATE Tabelle_1 t1 SET t1.Spalte_1 = (SELECT t2.Spalte_1
FROM Tabelle_2 t2
t2.Spalte_2 = t1.Spalte_2
)
WHERE EXISTS (SELECT NULL
FROM Tabelle_2 t2
t2.Spalte_2 = t1.Spalte_2
)
;
Fehlen da nicht die WHERE keywords? Also wie folgt:
UPDATE Tabelle_1 t1 SET t1.Spalte_1 = (SELECT t2.Spalte_1
FROM Tabelle_2 t2
WHERE t2.Spalte_2 = t1.Spalte_2
)
WHERE EXISTS (SELECT NULL
FROM Tabelle_2 t2
WHERE t2.Spalte_2 = t1.Spalte_2
)
;
mfG
Benjamin
moin,
Fehlen da nicht die WHERE keywords? Also wie folgt:
in der tat, die sind mir abhanden gekommen, muss erst mal wieder ein paar mehr auf vorrat kaufen.
Ilja
Lieber Franco,
im Grunde hast Du die Lösung doch schon genannt:
Update Tabelle_1 set Spalte_1=Wert_aus_Tabelle_2_Spalte_1 where Spalte_2_ausTabelle_1_gleich_Spalte_2_aus_Tabelle_2.
Du hängst anscheinend an der Stelle
set Spalte_1=Wert_aus_Tabelle_2_Spalte_1
stimmt's?
Nach meinen bescheidenen und noch recht frischen (My)SQL-Erkenntnissen müsste dieser Teil in etwa so lauten:
SET Spalte_1 = Tabelle_2.Spalte_1
Da ich mittels PHP mit meiner DB kommuniziere muss ich die Spaltennamen mit dem Backtick "escapen" und dann sieht das bei mir so aus:
SET
Spalte_1=
Tabelle_2.
Spalte_1``
Liebe Grüße,
Felix Riesterer.