Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Update alle Einträge (https://www.delphipraxis.net/152394-sql-update-alle-eintraege.html)

ibp 21. Jun 2010 12:42

Datenbank: Interbase • Version: 6.5 • Zugriff über: SQL

SQL Update alle Einträge
 
Hallo,

gibt es eine Möglichkeit mit einer UPDATE Anweisung alle Datensätze zu ändern ABER mit unterschiedlichen Werten für die einzelnen Datensätze?

Struktur:
Tab1 (pkey,reckey,sortstr)
Tab2 (pkey,f1,f2,...fn)

Tab1.reckey=Tab2.pkey

Es kann mehrere Datensätze in Tab1 geben die den gleichen reckey haben!

Was gemacht werden soll: Tab1.sortstr soll aktualisiert werden. Dabei entspricht Tab1.sortstr=concat(tab2.f5+tab2.f1+...)

Wie bekomme ich das mit einem SQL-Statement hin ohne alle Datensätze in Tab2 durchlaufen zu müssen?

Hat jemand einen Tipp?

mkinzler 21. Jun 2010 12:44

AW: SQL Update alle Einträge
 
Und wie unterscheiden sich die Werte? Ist der neue Wert berechenbar?

ibp 21. Jun 2010 12:51

AW: SQL Update alle Einträge
 
Zitat:

Zitat von mkinzler (Beitrag 1030587)
Und wie unterscheiden sich die Werte? Ist der neue Wert berechenbar?

Nein die neuen Werte sind nicht berechenbar. Es werden die Felder nach einer bestimmten Definition aus Tab2 zusammengefügt.

mkinzler 21. Jun 2010 12:53

AW: SQL Update alle Einträge
 
Dann sind sie ja "berechenbar/ermittelbar"

DeddyH 21. Jun 2010 12:53

AW: SQL Update alle Einträge
 
Falls ich Dich richtig verstanden habe kannst Du es mal so versuchen:
SQL-Code:
UPDATE Tab1
SET sortstr = (
  SELECT Tab2.f5 || Tab2.f1 || ...
  FROM Tab2
  WHERE Tab2.pkey = Tab1.reckey)

ibp 21. Jun 2010 13:08

AW: SQL Update alle Einträge
 
also mit
Code:
select (tab2.f2||tab3.fx ...)
from tab1
left outer join tab2 an (tab1.reckey=tab2.pkey)
erhalte ich die richtige Ergebnismenge aber leider meckert interbase beim update mit "multiple rows in singleton select"

mkinzler 21. Jun 2010 13:09

AW: SQL Update alle Einträge
 
Der Subquery liefert mehrere Ergebniszeilen; du musst diesen so anpassen, dass genau ein Ergebnis rauskommt.

DeddyH 21. Jun 2010 13:13

AW: SQL Update alle Einträge
 
Dann habe ich die Master-Detail-Beziehung doch falsch verstanden (oder sie war falsch geschildert).

ibp 21. Jun 2010 13:16

AW: SQL Update alle Einträge
 
Zitat:

Zitat von mkinzler (Beitrag 1030607)
Der Subquery liefert mehrere Ergebniszeilen; du musst diesen so anpassen, dass genau ein Ergebnis rauskommt.

ja aber genau das will ich ja nicht, ich will gleichzeitig alle Datensätze in Tab1 updaten aber eben nicht mit einem Wert sondern mit verschiedenen, die sind abhängig von den verknüpften Datensätzen...

DeddyH 21. Jun 2010 13:21

AW: SQL Update alle Einträge
 
Er meint je zu aktualisierendem Datensatz ein Datensatz aus der Subquery. Im Moment kommen in Letzterer noch mehrere, da musst Du die Kriterien anpassen, damit nur der eine passende kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.
Seite 1 von 3  1 23      

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