Problem mit einer Abfrage

starbug

Erfahrenes Mitglied
Hallo Leute,

ich habe ein kleines Problem. Ich habe mehrere Tabellen mit einer 1:n Verbindung. Hier nun mein Problem. Ich habe eine Tabelle Artikel mit ca. 240 Artikelnummern. Diese ist mit einer Tabelle namens Lieferanten verbunden, wie bereits gesat mit einer 1:n Verbindung. Wenn ich nun eine Abfrage durchführe, die mir einfach nur alle Artikelnummern zeigen soll, bekomme ich nicht 240 angezeigt sondern nur 170. Und wenn ich diese Abfrage mit der Lieferantentabelle durchführe bekomme ich wieder nicht alle angezeigt und sogar doppelte einträger der Artikelnummern. WAs läuft da falsch?
 
item: Es handelt sich wohl um MS Access und nicht um Excel oder sontwas

item: Du musst die 2 Tabellen mit einem LEFT JOIN verknüpfen. ggf mit einem DISTINCT oder einem GROUP BY auf die Artikelnummern reduzieren

item: Wir können dir besser zeigen, wenn du a) deine Abfragen besser beschreibst oder b) dein SQL-Code mal zeigst
 
Also du hast recht es handelt sich um Access.


Code:
SELECT Artikel.ArtikelNr, Tabelle1.Feld1, Tabelle1.Feld2, Tabelle1.Feld3, Tabelle1.Feld4, Tabelle2.Feld1, Tabelle2.Feld2, Tabelle2.Feld3
FROM ((((((Artikel INNER JOIN Tabelle2 ON Artikel.ArtikelNr = Tabelle2.ArtikelNr) INNER JOIN Tabelle1 ON artikel.ArtikelNr = Tabelle1.ArtikelNr)

So sieht das aus, habe die Tabellen ein wenig umbenannt.
 
Wenn ich nun eine Abfrage durchführe, die mir einfach nur alle Artikelnummern zeigen soll, bekomme ich nicht 240 angezeigt sondern nur 170

Also wenn nur 170 angezeigt werden, bedeutet das ja das irgendein WHERE Argument greift. Wenn du aber alle 240 Datensätze anzeigen willst, dann frage die Datensätze einfach so ab:

SQL:
SELECT artikelnummer FROM deine_tabelle

Denke aber nicht das es das ist was du haben willst!?
 
Ja, Access ist unfähig SQL-Code sauber darzustellen. Aber wennm an den Code formatiert, sieht man, dass du ein INNER JOIN drin hast. Dieser grenzt die Artikelmenge auf die Artikel der Tabelle1 ein. Ergo werde nur Artikel ausgegeben, die in Tabelle1 vorhanden sind. Dasselbe mit der Tabelle2. Als Resultat kriegst du also nur die Artikell welche in Tabelle1 UND Tabelle2 vorhanden sind
Ändere diese zu LEFT JOIN und du kriegst alle Artikel der Artikeltabelle

SQL:
SELECT 
	Artikel.ArtikelNr, 
	Tabelle1.Feld1, 
	Tabelle1.Feld2, 
	Tabelle1.Feld3, 
	Tabelle1.Feld4, 
	Tabelle2.Feld1, 
	Tabelle2.Feld2, 
	Tabelle2.Feld3
FROM 
	Artikel 
	LEFT JOIN Tabelle2 ON 
		Artikel.ArtikelNr = Tabelle2.ArtikelNr
	LEFT JOIN Tabelle1 
		ON artikel.ArtikelNr = Tabelle1.ArtikelNr
 
Zuletzt bearbeitet von einem Moderator:
Hmm,

also ich verstehe was Ihr meint aber es funktioniert nicht. Also vielleicht habe ich mich am Anfang falsch ausgedrückt. Ich habe so 240 Artikelnummern: Davon haben aber nur ca. 70 Nummern mehr details. Wenn ich also eine Abfrage mit der Artikeltabelle und zwei weiteren verknüpften Tabellen machen, dann dürften in der View auch nur 70 Artikel mit den passenden Details stehen.

Für ich die Abfrage mit einem INNER JOIN durch, so bekomme ich ca. 100 Artikel angezeigt.

Die gleiche Abfrage mit einem LEFTJOIN zeigt mir dann natürlich alle 240 Artikel an.
 
Nö. Nicht bei einer 1:n-Beziehung.

Wenn du auf einen Artikel, 2 Einträge in der Tabelle1 hast, dann gibt das bereits 2 Zeilen. Wenn du noch 3 Einträge zur selben Artikelnummer in der Tabelle2, dann werden daraus 6 Zeilen.


Du kommst nur auf 70, wenn du eine 1:1 Beziehung hast.

Mein Beispiel von oben in Fakten:
Code:
Artikel:
ArtikelNr
---------
1
2

Tabelle1:
ArtikelNr | id1
---------------
1         | 11
1         | 12
2         | 21

Tabelle2:
ArtikelNr | id2
---------------
1         | 201
1         | 202
1         | 203

Resultat deines SQLs mit INNER JOIN
ArtikelNr | id1 | id2
---------------------
1         | 11  | 201
1         | 11  | 202
1         | 11  | 203
1         | 12  | 201
1         | 12  | 202
1         | 12  | 203
Also, welche der 6 Zeilen zu ArtikelNr 1 soll nun gezählt werden?
 
Dann sag uns doch mal wie die einzelnen Tabellen aufgebaut sind und über welches Feld sie miteinander verknüpft sind.
 
Also ich habe mal eine ganz kleine Test DB angehängt. Wenn ich meine Abfragen dort durchführe funktioniert es auch. Aber man muss sich das so vorstellen das an den Detail Tabellen noch weitere Tabellen hängen.
 

Anhänge

Neue Beiträge

Zurück