AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird FIRST mit JOIN
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird FIRST mit JOIN

Ein Thema von SvB · begonnen am 27. Sep 2016 · letzter Beitrag vom 27. Sep 2016
Antwort Antwort
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Firebird FIRST mit JOIN

  Alt 27. Sep 2016, 11:07
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDac
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
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Firebird FIRST mit JOIN

  Alt 27. Sep 2016, 11:12
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)
  )
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Firebird FIRST mit JOIN

  Alt 27. Sep 2016, 11:14
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
221 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Firebird FIRST mit JOIN

  Alt 27. Sep 2016, 12:24
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
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Firebird FIRST mit JOIN

  Alt 27. Sep 2016, 13:45
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
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Firebird FIRST mit JOIN

  Alt 27. Sep 2016, 14:18
Danke für die Rückmeldung - gut zu wissen
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Firebird FIRST mit JOIN

  Alt 27. Sep 2016, 14:29
Ja, liegt vielleicht aber auch an einem fehlenden Index in der Kombination.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  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 16:45 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