2016-03-30 8 views
2

Ich habe zwei Datenbanken: Zeus und Hades. Beide Datenbanken haben ein Feld namens wxrecord. Auf Hades ist der wxrecord ein Unix-Zeitstempel.MYSQL UPDATE mit verschachtelten SELECT aus verschiedenen Datenbanken

Ich erstelle einen neuen Datensatz in zeus.alldata mit einem SELECT/INSERT von hades.wxdata. Dies beinhaltet den wxrecord von hades.wxdata.

Sobald der neue Datensatz auf zeus.alldata erstellt wurde, muss ich einige mathematische Berechnungen ausführen und dann eine einzelne Spalte mit der Ausgabe dieser Berechnung aktualisieren.

Ich möchte Zeus aktualisieren, aber nur den spezifischen Datensatz auf Zeus aktualisieren, der dem entsprechenden Datensatz in hades entspricht. Ich möchte den maximalen wxrecord auf beiden zusammenbringen und updaten, solange sie gleich sind. Hier

ist, was ich versucht habe:

UPDATE zeus.alldata SET A='50' WHERE (SELECT max(wxrecord) FROM zeus.alldata) = (SELECT max(wxrecord) FROM hades.wxdata); 

ich diesen Fehler erhalte:

ERROR 1093 (HY000): You can't specify target table 'alldata' for update in FROM clause 

Jede Hilfe

+0

Im Allgemeinen können Sie nicht ein und dieselbe Tabelle innerhalb einer Abfrage wie UPDATE und SELECT. Sie können versuchen, 'INNER JOIN' von' alldata' Tabelle in die Abfrage zu machen. Sehen Sie mehr hier: http://Stackoverflow.com/questions/4268416/sql-update-with-sub-query-that-references-the-same-table-in-mysql – mitkosoft

Antwort

1

In jedem Fall würde geschätzt, ich nehme an, Sie eigentlich diese wollen Abfrage:

UPDATE zeus.alldata 
    SET A = '50' 
    WHERE wxrecord = (SELECT max(wxrecord) FROM hades.wxdata); 

Dadurch wird der Datensatz in zeus mit dem maximalen Datensatzwert in hades aktualisiert.

+0

Danke, das hat super funktioniert! – Richard

Verwandte Themen