PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Joins über mehere Tabellen möglich?



Lin728
29-09-2005, 12:27
Hallo,
Ist es möglich z.B. einen inner-join über sagen wir mal 4 tabellen zu machen?

Romanday
29-09-2005, 12:37
Hallo,

einigermaßen blöde frage ich weiß, aber google war auch net fähig mir was brauchbares (= ich versteh's *g*) zu liefern.

Ist es möglich z.B. einen inner-join über sagen wir mal 4 tabellen zu machen? Und wenn nicht wie löst man derartige "Probleme" sonst?

Danke im Vorraus, lg Clemens

Bei solch heftigen Joins ist meist das DB Design eventuell nicht in Ordnung!?
Weiterhin kannst du auch noch mit subselects und temp Tabellen arbeiten,
wenn das die Abfrage hergibt (erleichtert).

mwanaheri
29-09-2005, 15:08
Ich denke nicht, dass da unbedingt mit dem Design was nicht stimmen muss. Wenn man hoch normalisiert kann das für einige Fragen schon mal vorkommen.

Ein solcher join geht, ist aber schnell mal etwas zickig, da man mit den Namen genau aufpassen muss. Ich finde hier die Syntax a la
select tabA.id as aid, tabA.dings as dings ...
from tabA,tabB,...
where tabA.id = tabB.irgendwas and...

übersichtlicher als den ausgeschriebenen join, auch wenn ich den sonst vorziehe.
Ob diese Fassung oder das Arbeiten mit subselects günstiger ist, solltest du mal ausprobieren (mit explain)

Lin728
29-09-2005, 16:53
Ja, die Normalisiserung ist relativ extrem - hab mich aber dazu entschieden einfach weil diese DB gut wartbar sein soll und eventuell auch noch später erweitert werden könnte - und wenns da nicht ordentlich normalisiertist ...

Romanday
29-09-2005, 17:10
Wie teile ich dem rdbms mit dass ich einen Join über mehrer tabellen haben möchte?

Danke im Vorraus, lg Clemens

Da gibt es doch mehrere Beispiele ->
http://dev.mysql.com/doc/mysql/de/join.html

http://dev.mysql.com/doc/mysql/search.php?q=join&from=%2Fdoc%2Fmysql%2Fde%2Fjoin.html&lang=de

(Wenn es sich überhaupt um mysql handelt!?)

mwanaheri
29-09-2005, 18:31
Nehmen wir an, du hast folgende Tabellen:
tabA: id, ding
tabB: id, ding
tabC: id,idA,idB,ding
tabD: id, idC, ding
dann geht:

select tabA.ding as ading, tabB.ding as bding, tabC.ding as cding,tabD.ding as dding
from tabA,tabB,tabC,tabD
where tabA.id = tabC.idA
and tabB.id = tabC.idB
and tabD.id = tabC.id;

tabC.idA hat Fremdschlüssel auf tabA.id,
tabC.idB hat Fremdschlüssel auf tabB.id,
tabD.idC hat Fremdschlüssel auf tabC

Jasper
29-09-2005, 19:28
ein join über 4 tabellen ist vollkommen ok, das ist weder extreme normalisierung noch unperformant, im gegenteil: ich habe heute ein statement über 6 tabellen von subselects auf join/left-joins umgestellt. das resultset umfasste 34Mio zeilen. die subselect-version dauerte 4,5 tage, die join-version nur 90min.

ich persönlich würde aber immer ansi-syntax verwenden:

select ... from table1 a join table2 b on a.id = b.id join table3 on b.id = c.id where a.name = x

liest sich besser, man sieht sofort, in welcher reihenfolge sich das dataset aus den tabellen zusammensetzt (hilft ungemein bei outer joins) und vor allem wird die where-klausel _nur_ für den ursprünglichen zweck, dem filtern verwendet.


-j

mwanaheri
29-09-2005, 20:50
na, das ist doch mal 'ne Unterschied, der sich lohnt!
Sauberer ist der explizite join allemal, da haste recht.