Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage innerhalb einer Abfrage in einer Tabelle... (https://www.delphipraxis.net/36866-sql-abfrage-innerhalb-einer-abfrage-einer-tabelle.html)

ibp 27. Dez 2004 13:30


SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
 
Hallo,
ich versuche mal das Problem zu schildern...

Eine Tabelle baum hat die felder pkey,parkey und reckey.

Ich habe einen reckey='x', mit dem ich den zugehörigen pkey (eindeutig) bekomme, und ich brauche nun alle Datensätze (das können mehrere sein), wo parkey=pkey ist!

wie kann ich das machen?

trifid 27. Dez 2004 14:14

Re: SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
 
Hallo,
ich weiss zwar nicht welche Datenbank, aber soweit wie das nun verstanden habe,
würde ich es wie folgt abbilden
SQL-Code:
SELECT *
FROM Tabelle
WHERE pkey in (SELECT pkey
               FROM Tabelle
               WHERE reckey = 'x')
AND parkey=pkey

ibp 27. Dez 2004 14:32

Re: SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
 
hallo und danke, hebe es nun hinbekommen :thumb:

... habe die db nicht mitgeteilt, ich verwende eh nur standard sql befehle! aber "in" habe ich bis dato noch nie benutzt!

... habe es nun so dargestellt....

SQL-Code:
select * from baum
where parkey in
(select pkey from baum where reckey="xxx")

Jelly 27. Dez 2004 14:48

Re: SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
 
Zitat:

Zitat von ibp
SQL-Code:
select * from baum
where parkey in
(select pkey from baum where reckey="xxx")

Das geht aber viel effizienter, vorausgesetzt ich hab dein Problem richtig verstanden:
SQL-Code:
select * from baum
where parkey=pkey and reckkey='x'
Subselects sind, wenn sie überhaupt von DBMS unterstützt werden, immer recht langsam.

ibp 27. Dez 2004 15:22

Re: SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
 
Zitat:

Zitat von Jelly
SQL-Code:
select * from baum
where parkey=pkey and reckkey='x'
Subselects sind, wenn sie überhaupt von DBMS unterstützt werden, immer recht langsam.

... stimmt ist schon recht langsam...
zu deinem verständnis:
- es gibt nur einen datensatz bei dem gilt reckey='x', daraus folgt der pkey
- es gibt mehrere datensätze wo parkey=pkey ist!

... da glaube ich, dass deine abfrage nur nil ergibt, da es keinen datensatz gibt der so definiert sein kann!

Jelly 27. Dez 2004 15:30

Re: SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
 
OK, dann hatt ich dein Problem in der Tat falsch verstanden. Trotzdem hast du eine Möglichkeit, deine Abrage zu beschleunigen

1. Du verfährst über 2 Schritte. Sprich, du holst dir als erste deinen eindeutige pkey, mit einer simplen Abfrage
2. Dann über eine 2. Query, wo du ja jetzt schon pkey kennst, holst du dir deine eigentliche Datensaätze.

Wenn du einen SQL Server verwendest und Stored Procedures nutzen kannst, würd ich das alles in eine SP packen.

ibp 27. Dez 2004 15:52

Re: SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
 
... subselects sind wirklich sau langsam, ich wollte damit eigentlich zwei einzelne abfragen umgehen
...habe es nun ganz anders gelöst, durch umschreiben der funktion, da es der frage des treads nicht nahe kommt, poste ich auch nicht das ergebnis!
... aber danke an alle!

gruß aus f

trifid 27. Dez 2004 16:20

Re: SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
 
Zitat:

subselects sind wirklich ... langsam
nun, entweder liegt es an der Datenbank, dass der Query-Optimizer nicht optimal optimiert
oder es wurden schlichtweg einfach die notwendigen Key's vergessen.
Sicherlich könnte man das Problem auch anders lösen
StoredProcedure und Cursor ... etwas aufwendiger, oder
Aber es wurde nicht die Frage nach der Geschwindigkeit gestellt bzw. ob es hierbei um 100 oder 1000000 Datensätze geht.


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