AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Abfrage innerhalb einer Abfrage in einer Tabelle...
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Abfrage innerhalb einer Abfrage in einer Tabelle...

Ein Thema von ibp · begonnen am 27. Dez 2004 · letzter Beitrag vom 27. Dez 2004
Antwort Antwort
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#1

SQL Abfrage innerhalb einer Abfrage in einer Tabelle...

  Alt 27. Dez 2004, 14:30
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?
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#2

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

  Alt 27. Dez 2004, 15:14
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
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

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

  Alt 27. Dez 2004, 15:32
hallo und danke, hebe es nun hinbekommen

... 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")
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

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

  Alt 27. Dez 2004, 15:48
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.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

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

  Alt 27. Dez 2004, 16:22
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!
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

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

  Alt 27. Dez 2004, 16:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#7

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

  Alt 27. Dez 2004, 16:52
... 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
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#8

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

  Alt 27. Dez 2004, 17:20
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 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