AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Abfrage in Firebird DB über 6 Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage in Firebird DB über 6 Tabellen

Ein Thema von daniel775 · begonnen am 9. Sep 2017 · letzter Beitrag vom 12. Sep 2017
Antwort Antwort
hstreicher

Registriert seit: 21. Nov 2009
223 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 12:21
Ich würde erst mal die Doppelten Tabellen rauswerfen und dann entweder SQL 89 oder SQL 92 Syntax verwenden und nicht beides gleichzeitig

mfg Hannes
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 14:27
versuch es mal hiermit:
SQL-Code:
SELECT K.irgendwas,KP.Sdatetime
FROM
  Kreditoren as k
    join Rel_Kreditor_Artikel KAr on k.ID=KAr.Kreditor_ID
    join Artikel A on A.ID=KAr.Art_ID
    join Kreditor_Artikel KA on KA.ID=KAr.Kreditor_Art_ID
    join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID=KA.ID
    Join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID=KP.ID
where 1=1
  and max(KP.sDatetime)
group by k.irgendwas
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
daniel775

Registriert seit: 27. Nov 2010
46 Beiträge
 
#3

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 18:23
Also irgendetwas stimmt an dem Query nicht. Wenn ich "and max(KP.sDatetime)" weglasse, dann bekomme ich zumindest ein Ergebnis. Sonst die Errormessage
"Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 11, column 1.
Group."
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 18:30
wenn Du
"Group by k.irgendwas" genutzt hast, dann kann das nicht funktionieren, das ist der Platzhalter für Daten, die du aus der Kreditoren-Tabelle abfragen willst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
daniel775

Registriert seit: 27. Nov 2010
46 Beiträge
 
#5

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 18:36
Irgendwie hab ich befürchtet das die Antwort kommt. Nein, hab ich natürlich nicht 1:1 genutzt!
sondern:

SELECT k.Firmenname, k.KREDITORNR, KP.datum, KP.LISTENPREIS_NETTO, KP.EKPREIS_NETTO
FROM
Kreditoren as k
join Rel_Kreditor_Artikel KAr on k.ID = KAr.Kreditor_ID
join Artikel A on A.ID = KAr.Art_ID
join Kreditor_Artikel KA on KA.ID = KAr.Kreditor_Art_ID
join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID = KA.ID
join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID = KP.ID
where 1=1
and max(KP.SDATETIME) as datum
group by k.FIRMENNAME, k.KREDITORNR, KP.LISTENPREIS_NETTO, KP.EKPREIS_NETTO;


oder


SELECT k.Firmenname, k.KREDITORNR, KP.SDATETIME, KP.LISTENPREIS_NETTO, KP.EKPREIS_NETTO
FROM
Kreditoren as k
join Rel_Kreditor_Artikel KAr on k.ID = KAr.Kreditor_ID
join Artikel A on A.ID = KAr.Art_ID
join Kreditor_Artikel KA on KA.ID = KAr.Kreditor_Art_ID
join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID = KA.ID
join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID = KP.ID
where 1=1
and max(KP.SDATETIME)
group by k.FIRMENNAME, k.KREDITORNR, KP.LISTENPREIS_NETTO, KP.EKPREIS_NETTO;


oder

SELECT k.Firmenname, k.KREDITORNR, KP.sdatetime, KP.LISTENPREIS_NETTO, KP.EKPREIS_NETTO
FROM
Kreditoren as k
join Rel_Kreditor_Artikel KAr on k.ID = KAr.Kreditor_ID
join Artikel A on A.ID = KAr.Art_ID
join Kreditor_Artikel KA on KA.ID = KAr.Kreditor_Art_ID
join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID = KA.ID
join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID = KP.ID
where 1=1
group by k.FIRMENNAME, k.KREDITORNR, KP.sdatetime, KP.LISTENPREIS_NETTO, KP.EKPREIS_NETTO;


wobei ich beim letzten ein Ergebnis habe. Aber eben ohne " and max(KP.sDatetime) "
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.904 Beiträge
 
Delphi 12 Athens
 
#6

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 18:50
SQL-Code:
where 1=1
  and max(KP.SDATETIME) as datum
sollte da mal korrigiert werden, die erste Zeile enthält eine überflüssige Bedingung, da immer erfüllt und die zweite Zeile enthält nur einen Ausdruck, keine Bedingung.
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
daniel775

Registriert seit: 27. Nov 2010
46 Beiträge
 
#7

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 19:13
OK, ihr habt mich geschafft. Ganz durcheinander!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 11. Sep 2017, 16:21
SQL-Code:
where 1=1
  and max(KP.SDATETIME) as datum
sollte da mal korrigiert werden, die erste Zeile enthält eine überflüssige Bedingung, da immer erfüllt und die zweite Zeile enthält nur einen Ausdruck, keine Bedingung.
Oh pardon, da hab ich den typischen CopynPaste-Mist gebaut.
Das 1=1 oder 1=2 nutze ich um die angefragten Felder(Namen) zurück zu bekommen und um ggf. Konstrukte wie
Delphi-Quellcode:
 sqltxt.Add(' and Feld=wert ';
 sqltxt.Add(' and Person.sex=female';
 if irgendeinwert then
  sqltxt.Add(' and Feld2 is not null';
enzusetzen. Ist nur meine pers. Marotte.

Um die beiden Datensätze mit dem neuesten/jüngsten Datum zu erhalten mußt Du jetzt nur noch Deinen ursprünglichen Ansatz verfolgen:
SQL-Code:
  .....
  join (select k.id,max(KP.ABDatum) datum
FROM
   Kreditoren as k
     join Rel_Kreditor_Artikel KAr on k.ID=KAr.Kreditor_ID
     join Kreditor_Artikel KA on KA.ID=KAr.Kreditor_Art_ID
     join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID=KA.ID
     Join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID=KP.ID
Group by k.ID ) mindate on (mindate.id=k.id and mindate.datum=kp.sdatetime)
ggf. mußt Du noch die Aliase und das/die Datumsfelder anpassen, aber ich hoffe das Prinzip ist deutlich geworden.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 04:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz