fitzel69
Goto Top

Inner join über 3 Tabellen

Hallo zusammen,

ich habe folgendes Problem:

Ich muß aus unserem ERP System mehrere Infos heraus ziehen.
Hierfür benötige ich Informationen aus 3 Tabellen.
Tabelle 1 beinhaltet 8 von 10 Werte
Tabelle 2 ist die Verknüpfung von 1 nach 3
Tabelle 3 bittet den Einstieg mit einer Information zu einer Rechnungsnummer, über die es dann weiter geht und die beiden letzten Infos

Bei einem select über eine Tabelle, entstehen keine Fehler.

Anfänger Problem / Frage:

Wenn ich die Tabellen über einen Inner Join verbinde, erhalte ich alle Infos doppelt.
Ich habe bereits unter Google nachgeschaut, wie ein Inner join aufgebaut ist, und wie er eingesetzt wird. Finde allerdings keine Lösung für mein Problem


Besten Dank für die Hilfe

Content-ID: 287489

Url: https://administrator.de/forum/inner-join-ueber-3-tabellen-287489.html

Ausgedruckt am: 23.12.2024 um 07:12 Uhr

MadMax
MadMax 04.11.2015 um 13:18:26 Uhr
Goto Top
Hallo Fitzel69,

mit den Angaben wirst Du auch hier kaum eine Lösung finden, die sind ganz klar zu dürftig.
Sag doch mal an:
- welche Datenbank
- die drei Tabellen
- die Abfrage, die Du versucht hast

Gruß, Mad Max
Fitzel69
Fitzel69 04.11.2015 um 13:20:56 Uhr
Goto Top
select WPRTVOUCHSUBITEMS.vouch_no as Rechnungsnummer,
substring (wtrans.lot_no,5,6)as Charge,
wtrans.ord_no as Produktionsauftrag,
Pfeedbacks.res_no as Resource,
pfeedbacks.fb_value as Istwert,
Pfeedbacks.weight_in as Istmenge
from
WPRTVOUCHSUBITEMS inner join wtrans
on WPRTVOUCHSUBITEMS.lot_no = wtrans.lot_no
inner join pfeedbacks on pfeedbacks.ord_no = Wtrans.ord_no
and Pfeedbacks.res_no not like 'Sack%'
and Pfeedbacks.post_period >= '201510'
ukulele-7
ukulele-7 04.11.2015 um 17:38:19 Uhr
Goto Top
Du wirst in einer der 3 Tabellen Datensätze "doppelt" haben. Das kann durchaus richtig sein, hängt stark vom Aufbau ab. Hier sollte man dann im Join einschränken.

Beispiel
Tabelle A
pk_A
1
2

Tabelle B
pk_A, pk_C, Aktion
1, 1, Erstanlage
1, 1, Update
2, 2, Erstanlage

Tabelle C
pk_C
1
2

...raus kommen halt 3 Zeilen es sei denn ich sage z.B. in der Join Bedingung von Tabelle B das Aktion = 'Erstanlage' sein muss.
MadMax
MadMax 04.11.2015 um 19:31:55 Uhr
Goto Top
Ich merke schon, Du bist Minimalist, kein Wort zuviel face-smile

Grundsätzlich mal sieht der Befehl richtig aus.
Es wird also so sein, wie ukulele schreibt, Du hast doppelte Datensätze. Womöglich sind Deine joins durch
WPRTVOUCHSUBITEMS.lot_no = wtrans.lot_no"
bzw.
pfeedbacks.ord_no = Wtrans.ord_no
noch nicht vollständig.

Du solltest mal Deine Fremdschlüssel prüfen, ob da vielleicht noch eine Bedingung rein muß. Vielleicht ist ja in pfeedbacks auch noch eine "lot_no" drin, die dann auch noch mit ins join müßte.

Aber Wie schon gesagt, wenn Du keine Infos rausgibst, dann kann man Dir eben nicht helfen.

Gruß, Mad Max
Fitzel69
Fitzel69 05.11.2015 um 15:42:20 Uhr
Goto Top
Freund weniger Worte, -> ja

ich kann das Problem nicht genauer beschreiben. Ein innerjoin über 2 Tabellen, funktioniert. Über 3 Tabellen liefert die Abfrage falsche Werte.
Ich dachte erst, das das Problem bei mir liegt ( Gedankenfeher, etc)

Ich werde mir also eure Vorschläge und Hinweise noch mal durch die Tastatur / Kopf gehen lassen..

Danke trotzdem
ukulele-7
ukulele-7 05.11.2015 um 15:52:45 Uhr
Goto Top
Dann hast du wohl pro Eintrag in "WPRTVOUCHSUBITEMS" und "wtrans" mehrere Einträge in "Pfeedbacks" wo "Pfeedbacks.res_no not like 'Sack%' and Pfeedbacks.post_period >= '201510'" zutrifft.
Fitzel69
Fitzel69 06.11.2015 um 11:54:28 Uhr
Goto Top
Ukulele-7

guter Gedanke. Mit dem Select wähle ich nur die benötigten Felder aus, nicht aber die anderen Spalten. Diese enthalten auch unterschiedliche Werte
Ich teste das mal
MadMax
MadMax 06.11.2015 um 12:20:21 Uhr
Goto Top
Wenn Du dann feststellst, daß das zwar vom Ergebnis her richtig ist, daß mehrere DS rauskommen, Du die Dubletten aber weghaben willst, dann machst Du einfach ein "select distinct ..." und fertig.

Gruß, Mad Max
Fitzel69
Fitzel69 07.11.2015 um 11:11:37 Uhr
Goto Top
Servus.................

ich habe alle Ergebnisse Doppelt. Irgendetwas sehe ich nicht, oder verstehe es nicht
Hier ist meine Abfrage
Ziel ist es aus der Pfeedbacks 4 Werte zu ziehen, die Wtrans als Verbindung zur WPRTVOUCHSUBItems zu nehmen.


select WPRTVOUCHSUBITEMS.vouch_no as Rechnungsnummer,
substring (wtrans.lot_no,5,6)as Charge,
wtrans.ord_no as Produktionsauftrag,
Pfeedbacks.res_no as Resource,
pfeedbacks.fb_value as Istwert,
Pfeedbacks.weight_in as Istmenge,
Pfeedbacks.weight_out as Istmenge_Ausgang
from
WPRTVOUCHSUBITEMS inner join wtrans
on WPRTVOUCHSUBITEMS.lot_no = wtrans.lot_no
inner join pfeedbacks on pfeedbacks.ord_no = Wtrans.ord_no
and Pfeedbacks.post_period >= '201510'
and Pfeedbacks.res_no not like '%x%'
ukulele-7
ukulele-7 09.11.2015 um 09:30:56 Uhr
Goto Top
Dann musst du schon Beispieldaten posten, die Ausgangsdatensätze der 3 Tabellen und das was deiner Meinung nach raus kommen soll. Alles andere ist Kaffeesatzleserei.