Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#3

Re: Benötige Hilfe bei komplexer SQL Abfrage

  Alt 10. Aug 2005, 00:16
Zitat:
Ist es da sinnvoller die Anfrage in Access zu schreiben und die Abfrage zu importieren, oder die Abfrage in eine Delphi Query zu schreiben?
Das spielt bei Access imho keine Rolle, weil bei Access ohnehin immer dein PC die komplette Arbeit übernimmt. Es gibt ja keinen SQL-Server auf den du den Job abwälzen kannst.

Zitat:
Und alle Tabellen mit allen Daten erstmal zu Joinen dauert zu lange.
Du wirst nicht daran vorbeikommen die Tabellen mit Joins zu verknüpfen.
Wenn du die Joins so gestaltest, das nur geringe Datenmengen zurückgegeben werden, sollte es nicht weig dauern

Beispiel:
Falls bei der SQL Syntax irgend etwas nicht 100% passt bitte ich um Entschuldigung. Meine Access Zeiten sind schön länger vorbei ...

SQL-Code:
SELECT P.Pers_Vorname+' '+P.Pers_Name AS [Person]
            ,Max(K1.Kath1_Datum) AS [Kath1]
            ,Max(K2.Kath2_Datum) AS [Kath2]
            ,Max(K3.Kath3_Datum) AS [Kath3]
            ,Max(K4.Kath4_Datum) AS [Kath4]

FROM Person P

-- erst die Bezugstabellen mit PERSON Inner Joinen ..
INNER JOIN
  Pers_b_Kath1 PBK1
  ON PBK1.Pers_ID = P.Pers_ID

INNER JOIN
  Pers_b_Kath2 PBK2
  ON PBK2.Pers_ID = P.Pers_ID

INNER JOIN
  Pers_b_Kath3 PBK3
  ON PBK3.Pers_ID = P.Pers_ID

INNER JOIN
  Pers_b_Kath4 PBK4
  ON PBK4.Pers_ID = P.Pers_ID

-- Dann die Kathegorie-Tabellen mit den Bezugstabellen Outer Joinen damit
-- auch leere Kathegorie-Datensätze auftauchen..
LEFT OUTER JOIN
  Kathegorie1 K1
  ON K1.Kath1_ID = PBK1.Kath1_ID

LEFT OUTER JOIN
  Kathegorie2 K2
  ON K2.Kath2_ID = PBK2.Kath2_ID

LEFT OUTER JOIN
  Kathegorie3 K3
  ON K3.Kath3_ID = PBK3.Kath3_ID

LEFT OUTER JOIN
  Kathegorie4 K4
  ON K4.Kath4_ID = PBK4.Kath4_ID

-- Wenn möglich (unbedingt) mit der WHERE Klausel einen Filter auf die Tabelle Peron setzen
-- um die Result-Datenmenge möglichst klein zu halten
WHERE K.Name='MüllerOR K.Name='Meier'

-- alle "nicht in Aggregatfunktionen eingebundenen Felder" mit GROUP BY gruppieren
GROUP BY P.Pers_Vorname+' '+P.Pers_Name -- ergänzt und korrigiert...

Ich hoffe das ist was Passenndes für dich.
Um die Perfornamce etwas zu steigern, solltest du auf jeden Fall die Felder "Pers_ID" und "KathX_ID" in allen relevanten Tabellen indizieren.


Schöne Grüße,
Jens

  Mit Zitat antworten Zitat