Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Update mit Join ? (https://www.delphipraxis.net/40550-update-mit-join.html)

Gruber_Hans_12345 17. Feb 2005 13:58

Datenbank: Firebird • Zugriff über: -

Update mit Join ?
 
Gibt es eigentlich soetwas

SQL-Code:
UPDATE POSITION P SET P.LEVEL = T.LEVEL
INNER JOIN TRANSAKTION T ON T.PARENTID = P.ID
WHERE T.TYP = 9
POSITION
ID LEVEL
1 <ignorieren>
2 3
3 <ignorieren>
4 <ignorieren>
5 <ignorieren>
6 3

TRANSAKTION
PARENTID LEVEL TYP
2 3 9
5 3 3
6 3 9

shmia 17. Feb 2005 14:15

Re: Update mit Join ?
 
Das geht mit UPDATE....FROM
Es ist klar, dass immer nur eine Tabelle upgedatet werden kann.
Die Daten können aber aus einer Abfrage selektiert werden:
SQL-Code:
UPDATE POSITION SET LEVEL = T.LEVEL
FROM POSITION P INNER JOIN TRANSAKTION T ON T.PARENTID = P.ID
WHERE T.TYP = 9

Gruber_Hans_12345 17. Feb 2005 14:43

Re: Update mit Join ?
 
Kann es sein, das Firebird das UPDATE .... FROM nicht kann ?
schreibt mir das es FROM nicht kennt.

DelphiDeveloper 17. Feb 2005 16:52

Re: Update mit Join ?
 
Abgesehen von den unschoenen bezeichnern

position + level sind schluesselworte
und eine Tabelle Transaktion zu nennen ist wohl auch ein bisserl verwirrend.

Nun ja zu deinem Problem:

Die Abfrage ist wie oben angegeben synt. nicht korrekt.
es muss wohl eher sowas sein:


Delphi-Quellcode:
UPDATE "POSITION" P1 SET P1."LEVEL" =
(SELECT min(T."LEVEL")
 FROM "POSITION" P
 INNER JOIN TRANSAKTION T ON T.PARENTID = P.ID
WHERE T.TYP = 9  )

Gruber_Hans_12345 17. Feb 2005 17:47

Re: Update mit Join ?
 
Zitat:

Zitat von DelphiDeveloper
Abgesehen von den unschoenen bezeichnern

position + level sind schluesselworte
und eine Tabelle Transaktion zu nennen ist wohl auch ein bisserl verwirrend.

War nur ein vereinfachtes Beispiel, daher vielleicht etwas schlecht gewählt. (In meiner DB heißen die dann eh TREE_LEVEL, FLT_TRANSACTION, TEIL_POSITION ...)


Zitat:

Zitat von DelphiDeveloper
Nun ja zu deinem Problem:

Die Abfrage ist wie oben angegeben synt. nicht korrekt.
es muss wohl eher sowas sein:


Delphi-Quellcode:
UPDATE "POSITION" P1 SET P1."LEVEL" =
(SELECT min(T."LEVEL")
 FROM "POSITION" P
 INNER JOIN TRANSAKTION T ON T.PARENTID = P.ID
WHERE T.TYP = 9  )

Diese Abfrage kenn ich, aber ich habe das Problem, das ich meherer Felder setzen muß und dann in einer UPDATE 4 SELECT einzubauen, wobei alle dann denn selben Filter haben, naja sieht einfach sehr unprofessionell aus (funktioniert aber sieht unprofessionell)
Daher wollte ich fragen, ob ein schönerer Weg dafüt existiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 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