Entwickler-Ecke

Datenbanken - Join mit TQuery.SQL


Jakob Schöttl - Do 13.12.07 17:46
Titel: Join mit TQuery.SQL
Hi,

die Syntax von SQL könnte ja so aussehen:


SQL-Anweisung
1:
SELECT * FROM <table1>,<table2> ...                    


Geht das auch bei der TQuery-Komponente, weil die ja eigentlich immer nur einer Datenquellenkomponente zugeordnet ist. Oder kann man da auch mehrere Tabellen hinter FROM angeben?

Danke schon mal!


mkinzler - Do 13.12.07 18:58

Ja, obwohl das eher vom verwendeten DBMS abhängt. Aber sogar Paradox kennt JOIN. Der oben genannte implizite Join sollte mit allen DBMS gehen.


Jakob Schöttl - Fr 14.12.07 11:16

aber welche Tabellen muss ich denn dann angeben?

(ich nehme ttParadox)

Query ist ja nur mit einer DataSource verbunden und die DataSource ist nur mit einer Table verbunden... wie kann er dann mehrere Tabellen kennen?

Ich will hald ungefähr so was machen (ganz unten) [http://www.dsdt.info/tutorials/dbteil2/?page=6]


ene - Fr 14.12.07 11:23

Hi,

die beiden Tabellen, die du abfragen willst. Auch muss man kein INNER JOIN, um ein INNER JOIN zu erreichen, bzw können diese auch zu Perfomaceverlusten führen. Was willst du denn erreichen und wie ist der Datenaufbau?


Jakob Schöttl - Fr 14.12.07 13:50

sagen wir, ich will aus einer Tabelle "Artikel" und aus einer Tabelle "Lagerbestand" (Haupt-/Detailbeziehung) die Felder "Artikel.Name" und "Lagerbestand.Anzahl" auswählen, wo die "Lagerbestand.Anzahl" > 0.

und ich habe eine Query.

Wie muss dann die Abfrage sein, die ich Query.SQL zuweise?
so vllt?

SQL-Anweisung
1:
2:
SELECT Name,Anzahl FROM artikel, lagerbestand WHERE (anzahl>0) AND
(artikel.id=lagerbestand.ArtikelID)


ene - Fr 14.12.07 14:01

So sollte das aussehen, wobei Name immer eine ganz schlechte Feldbezeichnung ist ;)


Jakob Schöttl - Sa 15.12.07 22:04

Aha!!! Jetzt sehe ich endlich, dass TQuery auch ohne einer DataSource und nur mit SQL-Quelltext funktioniert!

ok, aber wie gebe ich die Namen der Datenbanken in dem SQL-Code an?
"c:\db\db1.db" und "c:\db\db2.db"

die Abfrage sieht dann so aus:

SQL-Anweisung
1:
SELECT * FROM "c:\db\db1.db", "c:\db\db2.db" WHERE ?                    


gibt es noch eine andere möglichkeit?

weil wenn ich jetzt auf Nicht-eindeutige Felder zugreifen will (hinter WHERE) dann müsste ich ja schreiben

SQL-Anweisung
1:
c:\db\db1.db.nichteindeutigerfeldname                    


MAlsleben - Sa 15.12.07 22:57

Hi,

müsste so gehen:


SQL-Anweisung
1:
Select a.Name, b.Anzahl from Tabelle1 a, Tabelle2 b where a.id=b.id2                    



Gruss Micha


Jakob Schöttl - Sa 15.12.07 23:28

ah, das geht, so weit! Vielen Dank MAlsleben...