Spalte mit identischem Inhalt einer anderen Spalte einer Tabelle befüllen
Hallo,
es ist sicherlich nur eine Kleinigket für einen DB-Spezi.
Ich möchte in einer DB2-Datenbank eine Tabelle durchlaufen und genau den Wert einer Spalte in dem selben Datensatz einer anderen Spalte kopieren, also den Inhalt zweiten Spalte wirklich komplett überschreiben.
So halt die ganze Tabelle durchlaufen.
Die Syntax von Transakt-SQL ist mir schon ein wenig bekannt, bei Abfragen weniger ein Problem, allerdings wenn ich schreibend auf die Datenbank zugreife werde ich sehr vorsichtig. Gerade wenn es sich um eine Produktiv-Datenbank handelt.
Es handelt sich um eine DB2-Datenbank, auf welche ich mittels SQL Anywhere zugreife.
Vielleicht kann mir Jemand auf die Schnelle helfen?
Vielen Dank schon mal im Voraus !!!
Gruß
Torsten
es ist sicherlich nur eine Kleinigket für einen DB-Spezi.
Ich möchte in einer DB2-Datenbank eine Tabelle durchlaufen und genau den Wert einer Spalte in dem selben Datensatz einer anderen Spalte kopieren, also den Inhalt zweiten Spalte wirklich komplett überschreiben.
So halt die ganze Tabelle durchlaufen.
Die Syntax von Transakt-SQL ist mir schon ein wenig bekannt, bei Abfragen weniger ein Problem, allerdings wenn ich schreibend auf die Datenbank zugreife werde ich sehr vorsichtig. Gerade wenn es sich um eine Produktiv-Datenbank handelt.
Es handelt sich um eine DB2-Datenbank, auf welche ich mittels SQL Anywhere zugreife.
Vielleicht kann mir Jemand auf die Schnelle helfen?
Vielen Dank schon mal im Voraus !!!
Gruß
Torsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189247
Url: https://administrator.de/forum/spalte-mit-identischem-inhalt-einer-anderen-spalte-einer-tabelle-befuellen-189247.html
Ausgedruckt am: 04.04.2025 um 23:04 Uhr
8 Kommentare
Neuester Kommentar
Moin TorstenB,
DB2 verhält sich bei deinem Problem auch nicht anders als andere Datenbanken.
Die formal richtige Antwort wäre also:
... mit den Anmerkungen:
Grüße
Biber
DB2 verhält sich bei deinem Problem auch nicht anders als andere Datenbanken.
Die formal richtige Antwort wäre also:
Update dieTabelle SET feld1 = feld2 Where (1=1);
... mit den Anmerkungen:
- feld1 und feld2 sollten schon vom gleichen Datentyp, der gleichen Länge und auch bezüglich Nullable/not nullable gleich oder zumindest verträglich sein
- wenn es eine Produktivdatenbanktabelle mit 37 Milliarden Datensätzen ist, dann wirst du mit EINEM Update nicht durchkommen ohne COMMIT, Du wirst die WHERE-Clause von "Where (1=1)" (== alle) ändern müssen in sinnvolle Portionierungen zu max 100000 Datensätzen.
Grüße
Biber
Moin Torsten,
Wenn nicht, dann müsstest du mal ein Beispiel nennen, über welches Kriterium die beiden Tabellen denn verknüpfbar sind.
SQL-Statements feuere ich zwar gern auf ungedeckte Produktivtabellen ab, aber selten gegen wehrlose Glaskugeln.
Grüße
Biber
Nur mal interessehalber, wie sehe es aus, wenn es sich um zwei verschiedene Tabellen handelt?
Gegenfrage: Willst du denn Feld1 in allen Datensätzen der Tabelle1 mit dem Feldinhalt von Feld2 jeden Satzes aus Tabelle2 ersetzen?Wenn nicht, dann müsstest du mal ein Beispiel nennen, über welches Kriterium die beiden Tabellen denn verknüpfbar sind.
SQL-Statements feuere ich zwar gern auf ungedeckte Produktivtabellen ab, aber selten gegen wehrlose Glaskugeln.
Grüße
Biber
Moin TorstenB,
na ja, zu theoretischen Fragen habe ich schon seit den Tagen meiner Kriegsdienstverweigerung ein gespaltenes Verhältnis.
Wenn du schon bezüglich Tabellen- und Feldnamen nich' Butter bei die Fische geben willst, dann wäre wenigstens eine etwas konkretere Benennung des Datenbankblechs sinnvoll ( DB2 LUW? DB2 iSeries? Db2 AS400? DB2 z/OS? v8.x? v9.1? v9.5? v10?).
Bei den LUW-Versionen ab 9.5 würde ich die (flinkere) MERGE-Syntax verwenden:
In allen anderen (oder versionsmäßig kleineren) DB2-Varianten:
P.S. Wir können die Felder auch "Heinz" und "Gerda" nennen, falls du irgendeine Vertraulichkeitserklärung unterschrieben hast.
Grüße
Biber
na ja, zu theoretischen Fragen habe ich schon seit den Tagen meiner Kriegsdienstverweigerung ein gespaltenes Verhältnis.
Wenn du schon bezüglich Tabellen- und Feldnamen nich' Butter bei die Fische geben willst, dann wäre wenigstens eine etwas konkretere Benennung des Datenbankblechs sinnvoll ( DB2 LUW? DB2 iSeries? Db2 AS400? DB2 z/OS? v8.x? v9.1? v9.5? v10?).
Bei den LUW-Versionen ab 9.5 würde ich die (flinkere) MERGE-Syntax verwenden:
MERGE INTO Tabelle1 T USING ( select samePKFeld, FeldInSource from Tabelle2) S
ON T.samePKFeld = S.samePKFeld
WHEN MATCHED THEN UPDATE SET T.FeldImTarget = S.FeldInSource;
In allen anderen (oder versionsmäßig kleineren) DB2-Varianten:
UPDATE Tabelle1 T
SET (T.FeldImTarget) = (
SELECT S.FeldImSource from Tabelle2 S Where S.SamePKFeld = T.SamePKFeld
)
WHERE EXISTS(SELECT 1 FROM Tabelle2 S WHERE T.SamePKFeld = S.SamePKFeld);
P.S. Wir können die Felder auch "Heinz" und "Gerda" nennen, falls du irgendeine Vertraulichkeitserklärung unterschrieben hast.
Grüße
Biber
Moin TorstenB,
wie jezz' ???
Du willst die normalisierte Beziehung wieder denormalisieren?
Eine Excel-like-Tabelle daraus machen??
Alle Ortsbezeichnungen (mit Stand vom 07.08.2012) nochmals aus einer Tabelle in die andere kopieren???
Damit es dann NOCH kosistenten wird als vorher?
Und dafür ein "überflüssig gewordenes" Textfeld in der Tabelle recyclen?
Nö.
Den Inhalt von Tabelle2.feldx in Tabelle1.feldy zu kopieren, das ist vielleicht sinnvoll, wenn es in Tabelle1 größenordnungsmäßig ähnlich viele Datensätze gibt wie Werte in tabelle2.Feldy.
Sprich: Du hast in Tabelle1 10000 eindeutige Vor/Nachnamenskombinationen mit Adressen und bekommst für diese 10000 Vor/Nachnamenskombinationen nun in Tabelle2 die Telefonnummern dazu. Diese Tabellen kannst du zu einer zusammenfassen. Weil sicherlich ziemlich jede(r eine Telefonnummer hat.
Aber bei PLZ/Ortsangaben ist eine FK-Relation sinnvoller, weil du doch in einer Tabelle 10000 Datensätze vorliegen hast, in der anderen aber doch nur 500 Datensätze.
Oder wie sind bei dir die Größenverhältnisse der beiden Tabellen?
Grüße
Biber
wie jezz' ???
Du willst die normalisierte Beziehung wieder denormalisieren?
Eine Excel-like-Tabelle daraus machen??
Alle Ortsbezeichnungen (mit Stand vom 07.08.2012) nochmals aus einer Tabelle in die andere kopieren???
Damit es dann NOCH kosistenten wird als vorher?
Und dafür ein "überflüssig gewordenes" Textfeld in der Tabelle recyclen?
Nö.
Den Inhalt von Tabelle2.feldx in Tabelle1.feldy zu kopieren, das ist vielleicht sinnvoll, wenn es in Tabelle1 größenordnungsmäßig ähnlich viele Datensätze gibt wie Werte in tabelle2.Feldy.
Sprich: Du hast in Tabelle1 10000 eindeutige Vor/Nachnamenskombinationen mit Adressen und bekommst für diese 10000 Vor/Nachnamenskombinationen nun in Tabelle2 die Telefonnummern dazu. Diese Tabellen kannst du zu einer zusammenfassen. Weil sicherlich ziemlich jede(r eine Telefonnummer hat.
Aber bei PLZ/Ortsangaben ist eine FK-Relation sinnvoller, weil du doch in einer Tabelle 10000 Datensätze vorliegen hast, in der anderen aber doch nur 500 Datensätze.
Oder wie sind bei dir die Größenverhältnisse der beiden Tabellen?
Grüße
Biber