AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Select First über 2 Tabllen
Thema durchsuchen
Ansicht
Themen-Optionen

Select First über 2 Tabllen

Ein Thema von Jick · begonnen am 20. Feb 2014 · letzter Beitrag vom 22. Feb 2014
Antwort Antwort
Jick

Registriert seit: 12. Jun 2011
26 Beiträge
 
Delphi XE Starter
 
#1

Select First über 2 Tabllen

  Alt 20. Feb 2014, 15:10
Datenbank: Firebird • Version: 2,5 • Zugriff über: Localhost
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Select First über 2 Tabllen

  Alt 20. Feb 2014, 15:14
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#3

AW: Select First über 2 Tabllen

  Alt 20. Feb 2014, 15:17
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.

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 ..

Geändert von jensw_2000 (20. Feb 2014 um 15:22 Uhr)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

AW: Select First über 2 Tabllen

  Alt 20. Feb 2014, 15:25
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.
  Mit Zitat antworten Zitat
Jick

Registriert seit: 12. Jun 2011
26 Beiträge
 
Delphi XE Starter
 
#5

AW: Select First über 2 Tabllen

  Alt 20. Feb 2014, 17:36
Hallo,

danke euch beiden, habe das letzte Beispiel gleich mal so übernommen und was soll ich sagen es geht


Grüße
Michael
  Mit Zitat antworten Zitat
Jick

Registriert seit: 12. Jun 2011
26 Beiträge
 
Delphi XE Starter
 
#6

AW: Select First über 2 Tabllen

  Alt 22. Feb 2014, 14:15
Hallo,

ich muss nochmal nerven 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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Select First über 2 Tabllen

  Alt 22. Feb 2014, 14:20
mach einen left ( outer) join draus
Markus Kinzler
  Mit Zitat antworten Zitat
Jick

Registriert seit: 12. Jun 2011
26 Beiträge
 
Delphi XE Starter
 
#8

AW: Select First über 2 Tabllen

  Alt 22. Feb 2014, 17:37
Hallo,

danke hat funktioniert.

Grüße
Michael
  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 11:48 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