Kopieren von Daten zwischen Zeilen in einer Tabelle
Bei der Datenbankverwaltung ist es häufig erforderlich, Zeilen basierend auf Daten aus anderen Zeilen innerhalb der Tabelle zu aktualisieren gleichen Tisch. Stellen Sie sich eine Tabelle mit den Spalten ID, NAME und VALUE vor, die doppelte NAME-Werte enthält, wie folgt:
ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | | 4 | Test | | 1 | Test3 | VALUE3 |
Angenommen, wir möchten die leeren VALUE-Felder in Zeilen mit doppelten NAME-Werten aktualisieren. Um dies zu erreichen, können wir SQL-Abfragen verwenden, die Werte innerhalb derselben Tabelle referenzieren und aktualisieren.
Ein Ansatz besteht darin, eine UPDATE-Anweisung mit einem Join zu verwenden. In der folgenden Abfrage verknüpfen wir die Datentabelle zweimal und geben ihnen den Alias dt1 und dt2:
UPDATE data_table dt1, data_table dt2 SET dt1.VALUE = dt2.VALUE WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != ''
Diese Abfrage identifiziert und aktualisiert die leeren VALUE-Felder (wobei dt1.VALUE leer ist) mit nicht leeren VALUEs von andere Zeilen mit demselben NAMEN (wobei dt2.VALUE nicht leer ist).
Alternativ können wir eine Unterabfrage verwenden, um die Zeilen mit nicht leeren VALUEs zu identifizieren und sie zur Aktualisierung wieder mit der Originaltabelle zu verbinden :
UPDATE data_table t, (SELECT DISTINCT ID, NAME, VALUE FROM data_table WHERE VALUE IS NOT NULL AND VALUE != '') t1 SET t.VALUE = t1.VALUE WHERE t.ID = t1.ID AND t.NAME = t1.NAME
Beide Abfragen führen zur gewünschten Ausgabe:
ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | VALUE2 | 4 | Test | VALUE1 | 1 | Test3 | VALUE3 |
Diese Ansätze bieten Flexibilität bei der Bearbeitung von Daten innerhalb einer Tabelle und ermöglichen es Ihnen, Werte basierend auf Kriterien zu aktualisieren Fügen Sie andere Zeilen in dieselbe Tabelle ein.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich leere Werte in einer Tabelle basierend auf Daten aus anderen Zeilen mit demselben Namen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!