Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Select First über 2 Tabllen (https://www.delphipraxis.net/179210-select-first-ueber-2-tabllen.html)

Jick 20. Feb 2014 14:10

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:
  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');
Wenn ich das so versuche kommt nur Unsinn raus, lasse ich aber die Tabelle "Kunde" weg funktioniert es.
Wie kann ich das über 2 Tabellen lösen ?

Grüße
Michael

DeddyH 20. Feb 2014 14:14

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:
SELECT
  Tabelle1.Feld, Tabelle2.Feld
FROM
  Tabelle1, Tabelle2
WHERE
  Tabelle1.Schlüssel = Tabelle2.Schlüssel
bzw.
SQL-Code:
SELECT
  Tabelle1.Feld, Tabelle2.Feld
FROM
  Tabelle1
JOIN
  Tabelle2 ON Tabelle1.Schlüssel = Tabelle2.Schlüssel

jensw_2000 20. Feb 2014 14:17

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:
  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');
PS: Und Glückwunsch zum ersten Post hier im Forum .. :)

jensw_2000 20. Feb 2014 14:25

AW: Select First über 2 Tabllen
 
Nochmal PS.
Für die letzten 5 Angebotsnummern musst Du absteigend sortieren, nicht aufsteigend.
Code:
ORDER BY ANGEBOT.ANGEBOTNR DESC
. Dann stehen die größten Nummern oben und werden via FIRST 5 abgerufen.

Jick 20. Feb 2014 16:36

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

Jick 22. Feb 2014 13:15

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:
  ABQuery.SQL.Add('INNER JOIN ANGEBOT ON');
  ABQuery.SQL.Add('AUFTRAG.ANGEBOTID=ANGEBOT.ANGEBOTID');
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
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

mkinzler 22. Feb 2014 13:20

AW: Select First über 2 Tabllen
 
mach einen left ( outer) join draus

Jick 22. Feb 2014 16:37

AW: Select First über 2 Tabllen
 
Hallo,

danke hat funktioniert.

Grüße
Michael


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