Thema: Delphi Join über 3 Tabellen

Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#15

Re: Join über 3 Tabellen

  Alt 5. Mär 2004, 11:17
Dein Problem bestand darin, dass du in der 2. Abfrage auch die Artikel bekommst, die im ersten schon vorkommen.
SQL-Code:
SELECT Art.Nr
      ,Art.Bez
      ,Sp.Id
      ,Sp.Vp
FROM Art INNER JOIN Sp ON Art.Id = Sp.ID_Art
WHERE Id_Kunde = :i_ID_Kunde And Vp <> 0
UNION
SELECT Art.Nr
      ,Art.Bez
      ,ArtPG.ID
      ,ArtPG.PG
FROM Art INNER JOIN ArtPG ON Art.ID = ArtPG.ID_Art
WHERE Art.ID Not In (SELECT subSP.ID_Art
                      FROM Sp subSP
                      WHERE subSP.ID_Kunde = :i_ID_Kunde)
Zitat von Hansa:
...Ist aber auch nicht schön und auch wohl lahm. ...
Wenn du die Kunden ID als Parameter übergibst und einen Index auf ID_Art legst, dürfte das da oben ziemlich flink sein.
Beim ersten Ausführen normal schnell, danach kann der Server auf Werte aus dem Cache zurückgreifen (dank der Verwendung des Parameters) -> viel schneller (abhängig von Größe & Typ vom Arbeitsspeicher des Servers).
Der Index auf Art_ID soll im "NOT IN..."-sub select aus einem Table scan in einen Index scan machen -> nochmal schneller.
  Mit Zitat antworten Zitat