![]() |
Datenbank: Paradox • Version: xx • Zugriff über: BDE
SQL update mit Bedingung aus anderer Tabelle
Hallo Gemeinde,
auch für mich geht endlich die Zeit der BDE vorbei, aber vorher muss ich noch ein kleines Update fertig machen. Ich stehe vor folgendem Problem: Ich habe zwei Tabellen A und B. Beide Tabellen haben ein bool Feld(DORESET). Tabelle A KANN(!) eine Referenz zu Tabelle B haben, muss aber nicht (Feld: REFERENCE). Nun muss ich in Tabelle A ein Feld(AKTWERT) auf 0 setzen, wenn entweder 1. A.REFERENCE=NULL and A.DORESET=TRUE oder 2. A.REFERECE != NULL and B.DORESET=TRUE (wobei B = A.REFERENCE ist). Teil 1 ist einfach : UPDATE A SET AKTWERT=0 WHERE DORESET=TRUE AND REFERENCE IS NULL Für die 2. Variante habe ich aber absolut keine Ahnung, wie ich das hinbekomme. Geht das überhaupt in einem Command? Hat da irgendjemand eine Idee? Ich danke schonmal wieder im voraus! Und ja: ich werde die BDE bald endgültig einstampfen 8-) Gruß |
AW: SQL update mit Bedingung aus anderer Tabelle
Bevor ich ein Update mache, schaue ich erstmal, ob ich ein passendes Select hinbekomme, um mir die Daten ansehen zu können.
Der Umbau auf Update ist dann (meist) recht einfach, da sich die Wherebedingung ja nicht ändert.
SQL-Code:
Wenn das das richtige Ergebnis liefert, könnte der "Rest" ungefähr so aussehen:
select a.Reference, b.Reference, b.DoReset
from a, b where a.Reference = b.Reference and a.Reference is not null and b.DoReset = true
SQL-Code:
Und nein, ein Performancekunstwerk wird dieses Statement ganz bestimmt nicht werden ;-)
update a set Aktwert = 0
where a.Reference in ( select a.Reference from a, b where a.Reference = b.Reference and a.Reference is not null and b.DoReset = true ) Aber für ein "brauch' ich nur einmal" sollte es reichen. |
AW: SQL update mit Bedingung aus anderer Tabelle
UI, toll!
Vielen Dank!! Sieht so aus als würde es mein Problem lösen!!! Jetzt noch eine vermessene Frage: Bekommt ihr SQL Gurus das auch hin, Teil 1 und 2 zu kombinieren? Ist kein muss, aber sähe schon geil aus ;-) Danke Gruß |
AW: SQL update mit Bedingung aus anderer Tabelle
Beide Bedingungen in ein OR packen
SQL-Code:
update a set Aktwert = 0
where a.Reference in ( select a.Reference from a, b where (a.Reference is null and a.DORESET is true) or (a.Reference = b.Reference and a.Reference is not null and b.DoReset = true) ) |
AW: SQL update mit Bedingung aus anderer Tabelle
ok,ok....Wald und Bäume und so...:?
DANKE vielmals! |
AW: SQL update mit Bedingung aus anderer Tabelle
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
Edit:
where
( a.Reference is null and a.DORESET is true) or ( a.Reference = b.Reference and a.Reference is not null and b.DoReset = true) Sorry die Forensuftware killt immer die Formatierungen Anhang 53373 |
AW: SQL update mit Bedingung aus anderer Tabelle
Verwende [CODE] statt [DELPHI], dort ist das nicht "ganz" so schlimm,
abgesehn davon, dass es eh kein Delphi-Code ist :stupid:, also vielleicht auch mal [CODE=SQL] versuchen. [EDIT] Nein, dort sind leider auch die Leerzeichen falsch. [/EDIT] PS: Vielleicht auch mal auf einwas Einigen?
SQL-Code:
Und das AND "kann" weg, denn NULL wird vom
and x.DoReset is true
and x.DoReset = true and x.DoReset -- es ist ja schon ein Boolean
Delphi-Quellcode:
sowieso nicht durchgelassen.
=
SQL-Code:
where a.Reference = b.Reference
and a.Reference is not null Was ist eigentlich mit a.ref=b.ref aber a.reset kein True (null oder false), oder zählt das Reset immer nur vom Letzten?
SQL-Code:
where (a.Reference is null
and a.DoReset) or (a.Reference = b.Reference and b.DoReset) -- hier auch noch "and a.DoReset" mit rein? where a.DoReset -- oder für Alles, weil es ja doppelt und in jedem OR drin wäre and (a.Reference is null or (a.Reference = b.Reference and b.DoReset)) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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 by Thomas Breitkreuz