Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select mit 2 Inner Joins auf gleiche Tabelle? (https://www.delphipraxis.net/134496-select-mit-2-inner-joins-auf-gleiche-tabelle.html)

Roadrunner.1 23. Mai 2009 10:35

Datenbank: NexusDB • Version: 2 • Zugriff über: Datenbankbrowser

Select mit 2 Inner Joins auf gleiche Tabelle?
 
Hallo zusammen, irgendwo ist ein kleiner Fehler, nur find' ich ihn nicht.

Folgendes habe ich (aufs wesentliche gekürzt wiedergegeben):
- Tabelle TELEMENT in der 2 x eine Farbe vorkommt, und dort jeweils der Primary Key der Tabelle TFARBE hinterlegt ist.
Die beiden Felder heißen Farbe und Farbekorpus
- Tabelle TFARBE in der es unter anderem diesen Primary Key gibt.

Nun möchte ich einen Select machen in der alle Kombinationen von Farbe und Farbekorpus ausgegeben werden:

SQL-Code:
SELECT TELEMENT.FARBE, TFARBE.ID, TELEMENT.FARBEKORPUS, TFARBE_1.ID
FROM (TFARBE INNER JOIN TELEMENT ON TFARBE.ID = TELEMENT.FARBE) INNER JOIN TFARBE AS TFARBE_1 ON TELEMENT.FARBEKORPUS = TFARBE_1.ID
GROUP BY TELEMENT.FARBE, TFARBE.ID, TELEMENT.FARBEKORPUS, TFARBE_1.ID;
Wenn ich diesen Select unter ACCESS ausführen, dann funktioniert es wie gewünscht (der Select stammt übrigens von ACCESS, aber mein eigener war auch nicht viel anderes).

Als Ergebnis erhalte ich, dass die ersten 2 Spalten identisch sind und die anderen 2 Spalten für sich betrachtet ebenfalls:

Delphi-Quellcode:
FARBE TFARBE.ID FARBEKORPUS TFARBE_1.ID
1     1         1           1
1     1         2           2
1     1         3           3
1     1         4           4
1     1         5           5
1     1         6           6
1     1         7           7
2     2         2           2
...
Das entspricht ja auch den beiden angegebenen Bedingungen für den Inner Join.

Führe ich aber den identischen Select im Nexus Datenbankexplorer aus, dann erhalte ich leider folgendes Ergebnis:

Delphi-Quellcode:
FARBE TFARBE.ID FARBEKORPUS TFARBE_1.ID
1     1         1           1
1     1         2           1
1     1         3           1
1     1         4           1
1     1         5           1
1     1         6           1
1     1         7           1
2     2         2           2
...
Es ist also TFARBE_1.ID identisch mit TFARBE.ID aber warum? :gruebel:
Bzw. Was muss ich machen das ich bei der NexusDB das gleiche (richtige) Ergebnis erhalte?

mkinzler 23. Mai 2009 10:43

Re: Select mit 2 Inner Joins auf gleiche Tabelle?
 
Du musst Aliases Vergeben, dann sollte es gehen ( wobei ich keine Erfahrungen in Access habe)

omata 24. Mai 2009 02:20

Re: Select mit 2 Inner Joins auf gleiche Tabelle?
 
SQL-Code:
SELECT TELEMENT.FARBE, TFARBE.ID, TELEMENT.FARBEKORPUS, TFARBE_1.ID
FROM TFARBE
INNER JOIN TELEMENT
  ON TFARBE.ID = TELEMENT.FARBE
INNER JOIN TFARBE AS TFARBE_1 
  ON TELEMENT.FARBEKORPUS = TFARBE_1.ID
GROUP BY TELEMENT.FARBE, TFARBE.ID, TELEMENT.FARBEKORPUS, TFARBE_1.ID

Roadrunner.1 26. Mai 2009 09:29

Re: Select mit 2 Inner Joins auf gleiche Tabelle?
 
Danke für die Antwort, aber das Ergebnis ist leider das gleiche: :(

Delphi-Quellcode:
FARBE ID FARBEKORPUS ID_2
1     1  1           1
1     1  2           1
1     1  3           1
1     1  4           1
1     1  5           1
1     1  6           1
1     1  7           1
2     2  2           2
...
Trotz:
SQL-Code:
 ON TELEMENT.FARBEKORPUS = TFARBE_1.ID
weichen die beiden Spalten in der NexusDB voneinander ab. Unter Access mit kopierten Tabellen funktioniert es hingegen. Zur Not verdoppele ich unter NexusDB die Tabelle TFARBE, aber das kann ja eigentlich nicht Sinn der Sache sein.

Roadrunner.1 26. Mai 2009 11:46

Re: Select mit 2 Inner Joins auf gleiche Tabelle?
 
:hello: Problem gelöst!

Also ich halte das für einen Fehler in der NexusDB, aber sei's drum wenn es so einfach zu umgehen ist.

Das ich die 2. Tabelle TFARBE in TFARBE_1 umbenannt habe reichte nicht. Auch die 1. Tabelle TFARBE muss umbenannt werden. Es entzieht sich mir die Logik warum das notwendig sein sollte, aber gut, wenn dann der Select richtig ausgeführt wird. :gruebel:

Bezogen auf das letzte Posting würde der Select also wie folgt lauten:

SQL-Code:
SELECT TELEMENT.FARBE, TFARBE_2.ID, TELEMENT.FARBEKORPUS, TFARBE_1.ID
FROM TELEMENT
INNER JOIN TFARBE AS TFARBE_2
  ON TFARBE_2.ID = TELEMENT.FARBE
INNER JOIN TFARBE AS TFARBE_1
  ON TELEMENT.FARBEKORPUS = TFARBE_1.ID
GROUP BY TELEMENT.FARBE, TFARBE_2.ID, TELEMENT.FARBEKORPUS, TFARBE_1.ID
Wobei ich die beiden Tabellen TFARBE und TELEMENT wieder vertauscht habe, wie's in meinem ursprünglichen Posting war.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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