Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird FIRST mit JOIN (https://www.delphipraxis.net/190356-firebird-first-mit-join.html)

SvB 27. Sep 2016 10:07

Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDac

Firebird FIRST mit JOIN
 
Ich habe eine Datenbankabfrage erstellt, in der zu den Master-Datensätzen die entsprechenden Detail-Datensätze zurück gegeben werden. Jetzt möchte ich die Anzahl der zurückgegebenen Datensätze limitieren und habe dafür FIRST 10 genutzt. Funktioniert auch technisch wie es soll.
Meine Frage: Kann ich die Abfrage so anpassen, dass mir die ersten 10 Master-Datensätze + alle Detail-Datensätze zurück gegeben werden, also z.B. 20 Datensätze, wenn es zu jedem Master-Datensatz zwei Detail-Datensätze gibt.
Ist so was möglich?
Code:
SELECT FIRST 10 a.Nr, b.Bez, b.Menge FROM a LEFT JOIN b ON b.Nr = a.Nr

ConnorMcLeod 27. Sep 2016 10:12

AW: Firebird FIRST mit JOIN
 
Aus dem Kopf ...
Code:
SELECT a.Nr, b.Bez, b.Menge FROM a LEFT JOIN b ON b.Nr = a.Nr
WHERE
  (
    a.Nr in (SELECT FIRST 10 aa.Nr FROM a aa)
  )

Neutral General 27. Sep 2016 10:14

AW: Firebird FIRST mit JOIN
 
So müsste es gehen:
Code:
SELECT
  master10.*,
  detail.*
FROM
(
    SELECT FIRST 10
      master.felder
    FROM master
    WHERE bedingung
) as master10
JOIN detail on detail.master_id = master10.id
WHERE bedingung

hstreicher 27. Sep 2016 11:24

AW: Firebird FIRST mit JOIN
 
also ein FIRST ohne ein ORDER BY ist keine Gute Idee da kommt nach jeder kleinen Änderung an der DB was anderes dabei raus

Delphi-Quellcode:
SELECT
  master10.*,
  detail.*
FROM
(
    SELECT FIRST 10
      master.felder
    FROM master
    WHERE bedingung
    ORDER BY irgendwas <-----
) as master10
JOIN detail on detail.master_id = master10.id
WHERE bedingung

SvB 27. Sep 2016 12:45

AW: Firebird FIRST mit JOIN
 
Super Jungs, Danke, funktioniert.

@ConnorMcLeod: funktioniert, dauert aber 6 Min.

@Neutral General: funktioniert, selbes Ergebnis in 0.045 Sek.

@hstreicher: ORDER BY hab ich drin, brauche ich

ConnorMcLeod 27. Sep 2016 13:18

AW: Firebird FIRST mit JOIN
 
Danke für die Rückmeldung - gut zu wissen ;-)

SvB 27. Sep 2016 13:29

AW: Firebird FIRST mit JOIN
 
Ja, liegt vielleicht aber auch an einem fehlenden Index in der Kombination.


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