![]() |
Datenbank: Firebird • Version: 2,5 • Zugriff über: Localhost
Select First über 2 Tabllen
Hallo,
ich versuche schon eine Weile eine Select First Abfrage zu erstellen welche mir die letzten 5 Agebotnr anzeigt.
Code:
Wenn ich das so versuche kommt nur Unsinn raus, lasse ich aber die Tabelle "Kunde" weg funktioniert es.
ABQuery.SQL.Add('SELECT FIRST 5 KUNDE.FIRMA,ANGEBOT.DATUM,ANGEBOT.ANGEBOTID,ANGEBOT.ANGEBOTNR,');
ABQuery.SQL.Add('ANGEBOT.ANZPOS,ANGEBOT.BEARBEITER,ANGEBOT.ANFRAGENR'); ABQuery.SQL.Add('FROM ANGEBOT,KUNDE'); ABQuery.SQL.Add('ORDER BY ANGEBOT.ANGEBOTNR ASC'); Wie kann ich das über 2 Tabellen lösen ? Grüße Michael |
AW: Select First über 2 Tabllen
Du musst die Beziehung der beiden Tabellen zueinander angeben. In der von Dir verwendeten "alten" Syntax also in der WHERE-Klausel, in der neuen mit einem JOIN und einer ON-Klausel.
SQL-Code:
bzw.
SELECT
Tabelle1.Feld, Tabelle2.Feld FROM Tabelle1, Tabelle2 WHERE Tabelle1.Schlüssel = Tabelle2.Schlüssel
SQL-Code:
SELECT
Tabelle1.Feld, Tabelle2.Feld FROM Tabelle1 JOIN Tabelle2 ON Tabelle1.Schlüssel = Tabelle2.Schlüssel |
AW: Select First über 2 Tabllen
Fehlt da nicht noch ein bisschen SQL Code?
Ohne JOIN oder WHERE ist das ein FullJoin zweiter Tabellen und sollte auch so nur Unsinn ausgeben.:gruebel: Wenn Deine ANGEBOT Tabelle ein Feld "Kundenr" hat, dann wird es so funktionieren:
Delphi-Quellcode:
PS: Und Glückwunsch zum ersten Post hier im Forum .. :)
ABQuery.SQL.Add('SELECT FIRST 5 KUNDE.FIRMA,ANGEBOT.DATUM,ANGEBOT.ANGEBOTID,ANGEBOT.ANGEBOTNR,');
ABQuery.SQL.Add('ANGEBOT.ANZPOS,ANGEBOT.BEARBEITER,ANGEBOT.ANFRAGENR'); ABQuery.SQL.Add('FROM ANGEBOT'); ABQuery.SQL.Add('INNER JOIN KUNDE ON'); ABQuery.SQL.Add('KUNDE.KUNDENNR=ANGEBOT.KUNDENNR'); ABQuery.SQL.Add('ORDER BY ANGEBOT.ANGEBOTNR ASC'); |
AW: Select First über 2 Tabllen
Nochmal PS.
Für die letzten 5 Angebotsnummern musst Du absteigend sortieren, nicht aufsteigend.
Code:
. Dann stehen die größten Nummern oben und werden via FIRST 5 abgerufen.
ORDER BY ANGEBOT.ANGEBOTNR DESC
|
AW: Select First über 2 Tabllen
Hallo,
danke euch beiden, habe das letzte Beispiel gleich mal so übernommen und was soll ich sagen es geht :P:-D Grüße Michael |
AW: Select First über 2 Tabllen
Hallo,
ich muss nochmal nerven :shock: wegen der Abfrage, jetzt habe ich leider noch Aufträge die kein Angebot haben und somit werden diese leider nicht angezeigt. Das Problem ist dieses INNER JOIN
Code:
Bei Aufträgen ohne Angebote ist die AUFTRAG.ANGEBOTID = NULL und deshalb wird sie unter ANGEBOT nicht gefunden , kann man noch ein OR einbauen so
ABQuery.SQL.Add('INNER JOIN ANGEBOT ON');
ABQuery.SQL.Add('AUFTRAG.ANGEBOTID=ANGEBOT.ANGEBOTID'); das auch diese gefunden werden ?
Code:
ABQuery.SQL.Add('SELECT FIRST '); ABQuery.SQL.Add(edLimit.Text); ABQuery.SQL.Add('ANGEBOT.ANGEBOTNR,KUNDE.FIRMA,AUFTRAG.KOMMISSION,AUFTRAG.BESTNR,'); ABQuery.SQL.Add('AUFTRAG.LIEFERTERMIN,AUFTRAG.LIEFERDATUM,AUFTRAG.GELIEFERT,AUFTRAG.PREIS'); ABQuery.SQL.Add('FROM AUFTRAG'); ABQuery.SQL.Add('INNER JOIN KUNDE ON'); ABQuery.SQL.Add('KUNDE.KNDID=AUFTRAG.KNDID'); ABQuery.SQL.Add('INNER JOIN ANGEBOT ON'); ABQuery.SQL.Add('AUFTRAG.ANGEBOTID=ANGEBOT.ANGEBOTID'); ABQuery.SQL.Add('ORDER BY AUFTRAG.KOMMISSION DESC'); Grüße Michael |
AW: Select First über 2 Tabllen
mach einen left ( outer) join draus
|
AW: Select First über 2 Tabllen
Hallo,
danke hat funktioniert. Grüße Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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