AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Daten innerhalb einer Tabelle vervielfältigen
Thema durchsuchen
Ansicht
Themen-Optionen

Daten innerhalb einer Tabelle vervielfältigen

Ein Thema von PistolenPeter · begonnen am 28. Mai 2015 · letzter Beitrag vom 28. Mai 2015
Antwort Antwort
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#1

Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 10:04
Hallo zusammen,

ich möchte innerhalb einer Tabelle mehrere Felder updaten.

Tabelle (Beispiel)
__A____B____C____D____E____F____G__
1111   
11125500007
1113   
11215500008
1122   
12116600009
1212   
1213   
1221   
12227700010
1223   

Ich möchte jetzt die Felder E und F updaten.
Die Werte von E und F sollen überall dort eingetragen werden, wo die Felder A, B und C gleich sind mit den Feldern A, B und C der Records, die in G einen Wert haben.
Es gibt also für jeden Wert in G mehrere Records, die in den Feldern A, B und C übereinstimmen. Die Werte aus E und F möchte in bei diesen Records updaten.
Ich weiß leider nicht, wie ich es besser beschreiben soll. Ich hoffe, ihr versteht mich.

Das Problem ist, dass die Tabelle nicht ansatzweise Normalisiert ist, aber uralt und ich keine Möglichkeit habe, an der Struktur zu ändern.
Es muss also irgendwie anders gehen. Und da brauche ich ein bisschen Unterstützung.


Das Ergebnis soll so aussehen:
__A____B____C____D____E____F____G__
111155 
11125500007
111355 
11215500008
112255 
12116600009
121266 
121366 
122166 
12227700010
122377 

Wenn mir jemand bei der SQL Anweisung helfen könnte, wäre das himmlisch und ich sehr dankbar.

Beste Grüße
PistolenPeter

Geändert von PistolenPeter (28. Mai 2015 um 10:16 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 10:12
Hat die Tabelle einen Primärschlüssel?
Markus Kinzler
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#3

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 10:17
Mal so ins Blaue geschossen:

Code:
Update tabelle tu
Set E=(Select E FROM tabelle tl WHERE tl.A=tu.A and tl.B=tu.B and tl.B=tu.B AND tl.G <> 0),
    F=(Select F FROM tabelle tl WHERE tl.A=tu.A and tl.B=tu.B and tl.B=tu.B AND tl.G <> 0)
WHERE tu.G = 0
  Mit Zitat antworten Zitat
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#4

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 10:22
@mkinzler: leider gibt es keinen PK.
Den könnte ich hinzufügen, das wäre dann nur nichts anderes als eine bessere ROW_NUMBER.

@Mikkey: Ich versuch's mal sofort.

Grüße
PistolenPeter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 10:26
Ich würde es so versuchen:

SQL-Code:
update (
  select
    t1.a, t1.b, t1.c, t1.e te, t1.f tf, t2.e, t2.f
  from
    <Tabelle> t1
      join <Tabelle> t2 on t2.a = t1. a and t2.b = t1.b and t2.c = t1.c and t2.g is not null
  where
    t1.g is null)
set
  e = t1, f = tf;
Markus Kinzler
  Mit Zitat antworten Zitat
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#6

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 13:02
@Mikkey:
Funktioniert leider nicht.
Es gibt ein Update für eine Zeile, aber die Daten in der Tabelle ändern sich nicht.

@mkinzler:
Das klappt leider auch nicht. Oracle sagt:
SQL-Fehler: ORA-01779: cannot modify a column which maps to a non key-preserved table
01779. 00000 - "cannot modify a column which maps to a non key-preserved table"
*Cause: An attempt was made to insert or update columns of a join view which
map to a non-key-preserved table.
*Action: Modify the underlying base tables directly.

Wenn ich das richtig verstehe, funktioniert das nur, wenn es einen Primärschlüssel gibt UND dieser in dem JOIN enthalten ist.

Grüße
PistolenPeter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 13:16
Das habe ich berfürchtet

null ist nicht das selbe wie 0

SQL-Code:
Update tabelle tu
Set E=(Select E FROM tabelle tl WHERE tl.A=tu.A and tl.B=tu.B and tl.B=tu.B AND tl.G is not null),
    F=(Select F FROM tabelle tl WHERE tl.A=tu.A and tl.B=tu.B and tl.B=tu.B AND tl.G is not null)
WHERE tu.G is null;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 14:20
01779. 00000 - "cannot modify a column which maps to a non key-preserved table"
*Cause: An attempt was made to insert or update columns of a join view which
map to a non-key-preserved table.
*Action: Modify the underlying base tables directly.
Bei der Tabelle handelt es sich um einen View und nicht um eine Tabelle?

(Naja ein PK ist eigentlich nie falsch, auch wenn er nur eine "Zeilennummer" ist)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#9

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 14:22
Das habe ich berfürchtet

null ist nicht das selbe wie 0

SQL-Code:
Update tabelle tu
Set E=(Select E FROM tabelle tl WHERE tl.A=tu.A and tl.B=tu.B and tl.B=tu.B AND tl.G is not null),
    F=(Select F FROM tabelle tl WHERE tl.A=tu.A and tl.B=tu.B and tl.B=tu.B AND tl.G is not null)
WHERE tu.G is null;
Das klappt. Und ich verstehe sogar was da passiert

Vielen Dank!
PistolenPeter

Geändert von PistolenPeter (28. Mai 2015 um 14:25 Uhr)
  Mit Zitat antworten Zitat
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#10

AW: Daten innerhalb einer Tabelle vervielfältigen

  Alt 28. Mai 2015, 14:24
Bei der Tabelle handelt es sich um einen View und nicht um eine Tabelle?
Hallo K-H,

nein, es ist kein View, aber durch den JOIN entseht ja so etwas wie ein View.

Grüße
Peter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 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