Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: Update mit Select und IF/CASE in der Bedingung (https://www.delphipraxis.net/204572-sql-update-mit-select-und-if-case-der-bedingung.html)

haentschman 17. Jun 2020 13:22

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Danke...:P
Code:
UPDATE
  ADR
SET
  AdrValue = (select SUM(B.BelValue) as Summe from BEL B
                where B.Adr = ADR.Adr)
...macht ein Update mit einem Wert von 10

Code:
UPDATE
  ADR
SET
  AdrValue = (select SUM(B.BelValue) as Summe from BEL B
                where B.KDNR = ADR.Adr)
...macht ein Update mit einem Wert von 5


aber zusammen: (select) + (select) ...macht ein Update mit einem Wert von NULL

Das ist doch nur Addition...oder? :evil:

PS: Das Statement mit + hat vorher funktioniert...auf den Cent genau. Nur jetzt nicht mehr. :?

Nachtrag:
Zitat:

Also wenn eine der Summen NULL ist, weil keine Datensätze zum Summieren da sind, dann ist auch die Summe der Addition NULL, oder?
...prüfe ich mal.

Delphi.Narium 17. Jun 2020 15:18

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Zitat:

Zitat von haentschman (Beitrag 1467531)
Update 1:
Zitat:

IIF(B.Adr='', B.KDNR, B.Adr)
Zitat:

Meldung 195, Ebene 15, Status 10, Zeile 11
IFF wird nicht als Name einer integrierten Funktion erkannt.
:gruebel::cry:

Da hat er recht, es heißt auch nicht IFF sondern IIF
also nicht Iiii Äfff Äfff sondern Iiii Iiii Äfff ;-)

Ghostwalker 17. Jun 2020 16:43

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Oder..wie siehts damit aus:


UPDATE
ADR
SET
AdrValue = (select SUM(B.BelValue) as Summe
from BEL B
where IIF(Trim(B.Adr) is NULL, B.KDNR, B.Adr) = ADR.Adr

haentschman 18. Jun 2020 05:46

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Zitat:

also nicht Iiii Äfff Äfff sondern Iiii Iiii Äfff
:oops: ...urlaubsreif. Ich melde mich...:P

Nachtrag:
Die Geschwindigkeit liegt eher schlecht wie das mit dem case...:? (mit meiner Datemenge 38s)

Uwe Raabe 18. Jun 2020 07:51

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Zitat:

Zitat von haentschman (Beitrag 1467612)
Die Geschwindigkeit liegt eher schlecht wie das mit dem case...:? (mit meiner Datemenge 38s)

Das liegt vielleicht daran, dass der Ausdruck für jeden Record ausgewertet werden muss. Ein Index auf B.KDNR und/oder B.Adr hat somit keine Wirkung. Das läuft dann vermutlich auf einen Full Scan hinaus.

haentschman 18. Jun 2020 08:23

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Zitat:

Das läuft dann vermutlich auf einen Full Scan hinaus.
...eben. :P

jobo 18. Jun 2020 21:19

AW: SQL: Update mit Select und IF/CASE in der Bedingung
 
Ja, Fullscan ist ein gutes Stichwort.

Mit Deinen Mengenangaben habe ich mal probiert.
8000 Adressen und ca 2 Mio dazu passende Belege ergibt ca 15 Sekunden für ein Update mit Fullscans. Das ist aber unter Postgres und ohne Indizierung (wg Fullscan eh egal). (Wenn es keine Varchar Felder sind sondern Integer, ist es deutlich schneller, hatte ich erst nicht drauf geachtet)
Ob es nun mit >,<,= '' oder anders ist, macht plus/minus 1 Sekunde. Die Exaktheit der Summen ist ein Thema für sich, denke ich. Die DB ist natürlich nicht 3GB groß, da sie nur diese Daten enthält. Auch das ist dann aber bei einem Fullscan wahrscheinlich ein Thema.
Da es generierte Daten sind, sind sie kontinuierlich und natürlich passend generiert. In der Realität sicher anders und langsamer. Dafür auf einem alten Laptop..

Sind das realistische Werte? Dann kann man ja mal auf Firebird umsteigen.

Was die Richtigkeit der Summen angeht: Hast Du mal erhoben, welche ID wie belegt sind? Werden ja nach Ausprägung des Update vielleicht Werte doppelt summiert?
select kdnr, adr from belege where kdnr = adr;
select kdnr, adr from belege where kdnr = '' and adr ='';
select kdnr, adr from belege where kdnr != adr and adr is not null and adr !='';
usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr.
Seite 3 von 3     123   

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