Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen? (https://www.delphipraxis.net/163002-dbf-neulingfrage-wie-kann-ich-eine-query-ueber-mehrere-dbf-tabellen-joinen.html)

baurat 24. Sep 2011 21:06

AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
 
Zitat:

Bei dem VF-Treiber via ADO gibt man das Datenbank-Verzeichnis an und kann dann einfach per SQL die Tabellen ansprechen.
Das ist dann schon etwas einfacher in der Handhabung
Tataaaaaa! Hab jetzt endlich mal wieder Zeit mir das anzuschauen und auszuprobieren. Bin begeistert!

Connectionstring konnte ich bequem im Delphi zusammenklicken.

ADO-Query klappt "an sich" auch, super!

Jetzt hab ich nur diverse Probleme mit dem SQL-92 (oder ist das ein anderer?). Konkret:

a) in einer Tabelle stehen zwei Fremdschlüssel. Je nach Fall soll der eine oder der andere genommen werden und dann in der gleichen Query die Informationen aus der referenzierten Tabelle angezeigt werden.

Konkret: ich hab Teilnehmer (Stammdaten...), Kurse (Infos zu den Kursen) und Belegung (welcher Teilnehmer ist in welchem Kurs). Dummerweise gibts zwei Belegungen (1. Jahr und 2. Jahr). JEtzt will ich natürlich nur die aktuell gültige Belegung haben.

Mit MySQL geht das etwa so:

select t.famname, t.rufname,
ku.bezeichnung, ku.kursname,
if(t.startjahr=2009, b.kursid_1, b.kursid2) as kursid
from belegung b, teilehmer t, kurs ku
where b.tnid = t.id
and ku.id=kursid

Hier wird also der alias aus der if-Abfrage in der where-clause verwendet.

In der ado-query klappt das aber nicht, was - wie ich inzwischen gelesen hab - daran liegt, dass ein alias nur beim order by vorkommen darf.

Außerdem gibts kein "if", sondern ein "iif", auch das hat 15min gedauert bis ich was gefunden habe...

Große Frage: wie lautet die Query in sql-92? Sorry, geht über meine eingangs gepostete Frage hinaus, vielleicht weiß es ja trotzdem jemand auf die Schnelle...?

Auf jeden Fall DANKE für den Tipp mit ADO und dem VisualFoxpro-Treiber, das ist klasse!

Union 24. Sep 2011 21:43

AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
 
Viélleicht so?

Code:
select t.famname,
       t.rufname,
       ku.bezeichnung,
       ku.kursname,
       ku.id as kursid
from belegung b
inner join teilnehmer t on t.id = b.tnid
inner join kurs ku on ku.id = iif(t.startjahr=2009, b.kursid_1, b.kursid2)

baurat 24. Sep 2011 23:23

AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
 
Zitat:

Zitat von Union (Beitrag 1126476)
Viélleicht so?

Code:
select t.famname,
       t.rufname,
       ku.bezeichnung,
       ku.kursname,
       ku.id as kursid
from belegung b
inner join teilnehmer t on t.id = b.tnid
inner join kurs ku on ku.id = iif(t.startjahr=2009, b.kursid_1, b.kursid2)


...ja, ZIEMLICH GENAU so... :-D

Danke!

Nur für mich: anstelle einen Alias in der where-clause zu verwenden, nehme ich jetzt also immer einen (bzw. mehrere) inner join. Und aus "if" wird "iif". Bin gespannt was noch für Dialekt-Besonderheiten auftauchen...

Union 24. Sep 2011 23:27

AW: DBF-Neulingfrage: Wie kann ich eine Query über mehrere DBF-Tabellen joinen?
 
Sei froh dass Du nicht von PL/SQL umsteigen musst. Dagegen kommt Dir jeder andere Dialekt "nackt" vor ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Seite 3 von 3     123   

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 by Thomas Breitkreuz