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-Key: 287489

Url: https://administrator.de/contentid/287489

Printed on: April 26, 2024 at 01:04 o'clock

Member: MadMax
MadMax Nov 04, 2015 at 12:18:26 (UTC)
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
Member: Fitzel69
Fitzel69 Nov 04, 2015 at 12:20:56 (UTC)
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'
Member: ukulele-7
ukulele-7 Nov 04, 2015 at 16:38:19 (UTC)
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.
Member: MadMax
MadMax Nov 04, 2015 at 18:31:55 (UTC)
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
Member: Fitzel69
Fitzel69 Nov 05, 2015 at 14:42:20 (UTC)
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
Member: ukulele-7
ukulele-7 Nov 05, 2015 at 14:52:45 (UTC)
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.
Member: Fitzel69
Fitzel69 Nov 06, 2015 at 10:54:28 (UTC)
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
Member: MadMax
MadMax Nov 06, 2015 at 11:20:21 (UTC)
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
Member: Fitzel69
Fitzel69 Nov 07, 2015 at 10:11:37 (UTC)
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%'
Member: ukulele-7
ukulele-7 Nov 09, 2015 at 08:30:56 (UTC)
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.