Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Frage zu SQL-Statement (https://www.delphipraxis.net/44131-frage-zu-sql-statement.html)

glkgereon 14. Apr 2005 08:05

Datenbank: Access • Zugriff über: ADO

Frage zu SQL-Statement
 
hi

ich hab en db in dieser form: id, ParentID, Value
daraus erstelle ich so "Bäume"
nun möchte ich alle einträge löschen, wo es die Zahl, die in ParentID drinsteht nicht mehr in der id spalte gibt.

geht das so?
SQL-Code:
DELETE FROM all WHERE (SELECT Count(ID) FROM all WHERE ID = ParentID) = 0
und nochwas:

wenn ich zb 5 gleiche (vom design her) tabellen hab, wie kann ich die zusammenführen?
so?
SQL-Code:
INSERT INTO all VALUES (SELECT * FROM tbl1, tbl2, tbl3, tbl4)
mfg gereon

bttb930 14. Apr 2005 08:22

Re: Frage zu SQL-Statement
 
Zitat:

Zitat von glkgereon
hi

ich hab en db in dieser form: id, ParentID, Value
daraus erstelle ich so "Bäume"
nun möchte ich alle einträge löschen, wo es die Zahl, die in ParentID drinsteht nicht mehr in der id spalte gibt.

geht das so?
SQL-Code:
DELETE FROM all WHERE (SELECT Count(ID) FROM all WHERE ID = ParentID) = 0
und nochwas:

wenn ich zb 5 gleiche (vom design her) tabellen hab, wie kann ich die zusammenführen?
so?
SQL-Code:
INSERT INTO all VALUES (SELECT * FROM tbl1, tbl2, tbl3, tbl4)
mfg gereon

zu 1.: nein. Welche ParentID meinst Du denn? Doch sicher eine bestimmte, oder? Vielleicht meinst du das:

SQL-Code:
DELETE FROM all WHERE ID = :ParentID
Aber wie gesagt: Ich bin nicht sicher was Du meinst. :ParentID ist hier ein Parameter, den du noch setzen musst. Allerdings würdest du auf diese Weise nur einen Datensatz löschen, nämlich den Parent des Datensatze, von dem die ParentID stammt. Willst Du das?

zu 2.
je nach datenbank - in Access geht das mit UNION:

SQL-Code:
SELECT * FROM tbl1 UNION SELECT * FROM tbl2 UNION SELECT * FROM tbl3 ...

glkgereon 14. Apr 2005 08:33

Re: Frage zu SQL-Statement
 
also, das 2te sieht gut aus, thx

zum ersten:

ich hab ne baumstruktur, zb:

Delphi-Quellcode:
   0:1
  /   \
1:2   1:3
 |    / \
2:4 3:5 3:6
das ist immer parentid:id

nun fällt zb. 1:3 weg (wird gelöscht), und ich will alle unterpunkte löschen.

am besten direkt auch so, das auch unterpunkte von 3: bzw 3:6 gelöscht werden...

Stevie 14. Apr 2005 08:40

Re: Frage zu SQL-Statement
 
Setz einfach einen Fremdschlüssel auf ParentId, der auf ID verweißt und schalt cascade delete ein.
Dann werden alle Sätze gelöscht, die auf die von dir gelöschte Referenz verweisen.

glkgereon 14. Apr 2005 08:44

Re: Frage zu SQL-Statement
 
moment mal, was bitte?

hört sich gut an, könntest du das event mal kleinschrittig erklären? bin noch net so routiniert im umgang mit db's ;)

Stevie 14. Apr 2005 08:52

Re: Frage zu SQL-Statement
 
Geh mal in dein Access und lass dir die Beziehungen anzeigen (unter Extras).
Dann fügst du dort 2 mal deine Tabelle ein und ziehst von der einen das Feld ParentID auf ID der anderen (selben) Tabelle.
Dann markierst du den Haken "Mit referenzieller Integrität" und "Löschweitergabe an Detailsatz".

glkgereon 14. Apr 2005 08:54

Re: Frage zu SQL-Statement
 
ja nee, dann löscht er ja die einträge in tbl1 wenn die id in tbl2 flöten geht, wenn ich das richtig verstanden hab, das soll aber in der selben tabelle sein.

Stevie 14. Apr 2005 08:58

Re: Frage zu SQL-Statement
 
Ich schrieb
Dann fügst du dort 2 mal deine Tabelle ein und ziehst von der einen das Feld ParentID auf ID der anderen (selben) Tabelle.

Also, ein Verweis auf sich selber! :roll:

glkgereon 14. Apr 2005 09:08

Re: Frage zu SQL-Statement
 
ok, ich werds zu hause mal probieren.
wenn ichs net hinkriege meld ich mich nochmal...

glkgereon 14. Apr 2005 18:34

Re: Frage zu SQL-Statement
 
ich kapier das net

kannst du mir event mal ein beispiel schicken?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 Uhr.
Seite 1 von 2  1 2      

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