Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MS-SQL - zwei Tabellen zusammenführen (https://www.delphipraxis.net/168348-ms-sql-zwei-tabellen-zusammenfuehren.html)

Peinhard 16. Mai 2012 16:10

Datenbank: MS-SQL • Version: 10.50 (2008) • Zugriff über: ADO

MS-SQL - zwei Tabellen zusammenführen
 
Folgendes Problem: gegeben seien zwei Tabellen, die zu einer zusammengeführt werden sollen. Dazu wurden die Felder der (hoffentlich) demnächst obsoleten Tabelle in der anderen Tabelle angelegt. Natürlich sind die leer, sollen aber mit den Daten der obsoleten Tabelle gefüllt werden. Die andere Tabelle enthält aber bereits Daten, die Beziehung ist 1:1. Wie tue ich...?

shmia 16. Mai 2012 16:16

AW: MS-SQL - zwei Tabellen zusammenführen
 
Daten mit SQL kopieren? :glaskugel:

SQL-Code:
INSERT INTO NeueTabelle SELECT Feld1, Feld2, Feld3 FROM AlteTabelle

Sollte die neue Tabelle mehr Felder haben als die alte Tabelle, dann kann man diese mit Dummywerten füllen (oder auch NULLwerten)

SQL-Code:
INSERT INTO NeueTabelle SELECT Feld1, Feld2, Feld3, 'DummyWert4' AS Feld4, NULL AS Feld5 FROM AlteTabelle

DeddyH 16. Mai 2012 16:19

AW: MS-SQL - zwei Tabellen zusammenführen
 
Wenn ich Dich richtig verstanden habe, müsste das sinngemäß so gehen:
SQL-Code:
UPDATE
  Komplett-Tabelle
SET
  Feld1 = (
    SELECT
      Feld1
    FROM
      Zu-löschende-Tabelle
    WHERE
      Zu-löschende-Tabelle.FK = Komplett-Tabelle.PK),
  Feld2 = (
    SELECT
      Feld2
    FROM
      Zu-löschende-Tabelle
    WHERE
      Zu-löschende-Tabelle.FK = Komplett-Tabelle.PK),
--usw.

shmia 16. Mai 2012 16:23

AW: MS-SQL - zwei Tabellen zusammenführen
 
Zitat:

Zitat von DeddyH (Beitrag 1166821)
Wenn ich Dich richtig verstanden habe

Offensichtich hat der TE sein Problem nicht richtig erklärt, denn ich habe etwas anderes verstanden als Du.

Wieviele Tabellen gibt es insgesamt? (2 oder 3)
Ist die Zieltabelle jetzt leer oder schon (teilweise) mit Daten gefüllt?

DeddyH 16. Mai 2012 16:28

AW: MS-SQL - zwei Tabellen zusammenführen
 
Für mich klingt das eigentlich recht eindeutig.
Zitat:

Dazu wurden die Felder der (hoffentlich) demnächst obsoleten Tabelle in der anderen Tabelle angelegt.
Die bestehende erste Tabelle wurde also um die Felder der zweiten erweitert.
Zitat:

Die andere Tabelle enthält aber bereits Daten, die Beziehung ist 1:1.
Und enthält ihre bereits eingegebenen Daten. Ziel soll also wohl sein: aus 2 mach 1. Man könnte natürlich auch zunächst eine 3. Tabelle mit allen Feldern anlegen, diese mit einem JOIN aus den beiden anderen Tabellen befüllen, anschließend die beiden alten Tabellen löschen und die neue dann umbenennen.

Peinhard 16. Mai 2012 17:00

AW: MS-SQL - zwei Tabellen zusammenführen
 
Vielen Dank ersma. Insert Into dürfte aber nicht gehen, da dadurch in der (erweiterten) Zieltabelle ja neue Zeilen entstehen, es sollen aber die leeren Felder existierender Zeilen gefüllt werden. Den Update-Ansatz hatte ich so auch schon verfolgt, das mag er aber nicht, weil die Unterabfrage ja jeweils mehrere Werte liefert. Dabei wär's so schön...

Der Ansatz mit der dritten Tabelle und dem Join - das müsste eigentlich hinhauen. Manchmal is man ja wie vernagelt. Ich werde berichten. Aber nicht mehr heute...

p80286 16. Mai 2012 17:06

AW: MS-SQL - zwei Tabellen zusammenführen
 
so hab ich das auch verstanden (update).
(nur der 1:1 Beziehung traue ich nicht so ganz)
Gruß
K-H

Peinhard 16. Mai 2012 17:15

AW: MS-SQL - zwei Tabellen zusammenführen
 
>>(nur der 1:1 Beziehung traue ich nicht so ganz)

Doch, ist wirklich so. Klarer Design-Fehler.

Furtbichler 17. Mai 2012 05:47

AW: MS-SQL - zwei Tabellen zusammenführen
 
Wenn es eine 1:1 Beziehung gibt, dann sollte man ein Update ausführen, denn die neuen Felder sind ja noch leer, also:
SQL-Code:
Update NeueTabelle
  Set NeuesFeld1 = AlteTabelle.Feld1,
...
      NeuesFeldN = AlteTabelle.FeldN
from AlteTabelle
  where AlteTabelle.PK = NeueTabelle.PK
Wenn Du zusätzlich noch alle Einträge der alten Tabelle haben willst, die nicht in der neuen Tabelle sind, dann noch zusätzlich
SQL-Code:
Insert into NeueTabelle (NeuesFeld1,...,NeuesFeldN)
  select Feld1,...,FeldN
    from AlteTabelle left join
         NeueTabelle on AlteTabelle.PK = NeueTabelle.PK
    where NeueTabelle.PK is null

Peinhard 17. Mai 2012 11:44

AW: MS-SQL - zwei Tabellen zusammenführen
 
UPDATE...FROM - natürlich! *Stirnklatsch*

Ich muss dringend meine SQL-Kenntnisse auffrischen...

Works like a charm - Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz