![]() |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Danke...:P
Code:
...macht ein Update mit einem Wert von 10
UPDATE
ADR SET AdrValue = (select SUM(B.BelValue) as Summe from BEL B where B.Adr = ADR.Adr)
Code:
...macht ein Update mit einem Wert von 5
UPDATE
ADR SET AdrValue = (select SUM(B.BelValue) as Summe from BEL B where B.KDNR = ADR.Adr) 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:
|
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Zitat:
also nicht Iiii Äfff Äfff sondern Iiii Iiii Äfff ;-) |
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 |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Zitat:
Nachtrag: Die Geschwindigkeit liegt eher schlecht wie das mit dem case...:? (mit meiner Datemenge 38s) |
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Zitat:
|
AW: SQL: Update mit Select und IF/CASE in der Bedingung
Zitat:
|
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 14:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz