AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi verknüpfte Abfrage ... Wie macht mans richtig?

verknüpfte Abfrage ... Wie macht mans richtig?

Offene Frage von "torud"
Ein Thema von torud · begonnen am 20. Okt 2009 · letzter Beitrag vom 22. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2   
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 14:21
Datenbank: MDAC • Zugriff über: ADO
Hallo Wissende,

ich weiss leider nicht, ob meine Themenbezeichnung korrekt ist.

Folgende Abfrage funktioniert wunderbar:

Delphi-Quellcode:
DataModule1.ADOQuery1.Close;
DataModule1.ADOQuery1.SQL.Clear;

DataModule1.ADOQuery1.SQL.Add('
select
id,
round,
matches.team_a_id AS Team_A, <= statt die team_id, den Teamnamen
matches.team_b_id AS Team_B, <= statt die team_id, den Teamnamen
matches.result_a AS Res_A,
matches.result_b AS Res_B from matches where league_id =
' + internal_league_id + ' and round = ' + cmb_rounds.Text);

DataModule1.ADOQuery1.Open;
DataModule1.ADOQuery1.ExecSQL;
Nun möchte ich aber, dass in dem Grid NICHT die ID der Teams A und B angezeigt wird, sondern der richtige Teamname.

In der Datenbanktabelle Teams würde diese in Vergleich mit der ID gefunden werden. Leider weiss ich nun nicht, wie ich die Abfrage hierzu korrekt ändern muss.

Könnte mir einer von Euch hierzu Schützenhilfe geben und erklären warum es so macht? Das wäre echt lieb.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 14:27
SQL-Code:
SELECT M.id, M.round, T1.Name AS Team_A, T2.Name AS Team_B, M.result_a AS Res_A, M.result_b AS Res_B
FROM matches M
JOIN Teams T1 ON M.team_a_id = T1.ID
JOIN Teams T2 ON M.team_b_id = T2.ID
WHERE league_id = :internal_league_id
AND round = :cmb_roundsText
Ungetestet, wenn es funktioren sollte, erkläre ich es auch gerne

[edit] Tabellenalias vergessen, siehe Posts unten [/edit]
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
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 15:51
Servus Detlef,

es hat leider nicht funktioniert.

Hier mal der resultierende SQL-Code:

SELECT M.id, M.round, T1.Name AS Team_A, T2.Name AS Team_B, M.result_a AS Res_A, M.result_b AS Res_B FROM matches JOIN Teams T1 ON M.team_a_id = T1.ID JOIN Teams T2 ON M.team_b_id = T2.ID WHERE league_id = 2 AND round = 1

Um es etwas zu vereinfachen, liste ich hier mal die Felder der Tabellen.

Tabelle Matches:
id
season_id
league_id
round
team_a_id
team_b_id
result_a
result_b

Tabelle Teams
id
name_short
name_long
teamname
coach

team_a_id bzw. team_b_id entsprechen immer einer id aus der teams-tabelle. Von daher muss es eigentlich gehen. Ich nehme mal an, dass es an der Namenskonvention im Code liegt und habe schon aus T1.Name T1.name_short gemacht, aber es geht trotzdem nicht.

Folgende Fehlermeldung habe ich erhalten:
Syntaxfehler in FROM-Klausel.

Danke erstmal soweit. So langsam, verstehe ich das aber und werde hier und da noch einiges versuchen.
Danke
Tom
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#4

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 16:10
vielleicht geht es wenn man

SQL-Code:
...
FROM matches M
...
schreibt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 16:32
natürlich, der Tabellenalias muss ja auch vergeben werden. Das kommt davon, wenn man auf der Arbeit mal nebenher SQL tippt.
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
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#6

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 17:40
Also selbst wenn ich folgenden Code verwende erhalte ich eine Fehlermeldung wegen falscher Syntax:

SELECT M.id, M.round, T1.name_short AS Team_A, T2.name_short AS Team_B, M.result_a AS Res_A, M.result_b AS Res_B FROM matches M JOIN Teams T1 ON M.team_a_id = T1.ID JOIN Teams T2 ON M.team_b_id = T2.ID WHERE league_id = 1 AND round = 1

Im Access habe ich diese Abfrage mal so probiert und die gleiche Fehlermeldung erhalten, wobei das erste JOIN dabei selektiert wurde. Müssen da Klammern rein oder wo liegt der Hase im Pfeffer begraben?

Wenn alle Stricke reißen, stelle ich auch mal die MDB-Datei ein.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 18:01
*Uff* Access hat doch so eine kranke Klammer-Syntax. Wie das da nuun genau aussehen muss, weiß ich leider auch gerade nicht. Du könntest Dir ja einmal von Access selbst eine Abfrage generieren lassen, diese hier reinstellen und dann versuchen wir es nochmal.
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
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#8

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 18:31
Also ich bin leider absolut kein DB- oder ACCESS-Crack.

Die Abfrage, die mir ERGEBNISLOS im Access erzeugt wurde, sieht so aus:

SELECT matches.id, matches.round, matches.league_id, matches.team_a_id, matches.team_b_id
FROM matches INNER JOIN teams ON (matches.team_b_id = teams.id) AND (matches.team_a_id = teams.id)
where matches.league_id = 1 and matches.round = 1

Fakt ist, dass ich mind. 9 Datensätze habe, die die Leagueid 1 und die round 1 haben. Irgendwo ist da noch was nicht ganz koscher. Aber man sieht hier schon ganz schön die Klammer-Orgie.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 19:08
Hm...
SQL-Code:
SELECT M.id, M.round, T1.Name AS Team_A, T2.Name AS Team_B, M.result_a AS Res_A, M.result_b AS Res_B
FROM matches M
JOIN Teams T1 ON (M.team_a_id = T1.ID)
JOIN Teams T2 ON (M.team_b_id = T2.ID)
WHERE (M.league_id = 1)
AND (M.round = 1)
Kommt dabei etwas heraus?
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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: verknüpfte Abfrage ... Wie macht mans richtig?

  Alt 20. Okt 2009, 19:16
@torud: Könntest du deinem Beitrag eventuell einen aussagekräftigen Titel geben der ansatzweise erkennen lässt um welches Probleme es innerhalb dieses Themas geht?

[Edit]"bitte" durch "eventuell" ersetzt da es wohl etwas schwieriger sein könnte einen aussagekräftigeren Titel zu finden[/Edit]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:53 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