tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
18
ZUGRIFFE
908
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    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?
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Also du hast recht es handelt sich um Access.


    Code :
    1
    2
    
    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.
     

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    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:

    Code sql:
    1
    
    SELECT artikelnummer FROM deine_tabelle

    Denke aber nicht das es das ist was du haben willst!?
    starbug bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    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
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  6. #6
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    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.
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    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?
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  8. #8
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Dann sag uns doch mal wie die einzelnen Tabellen aufgebaut sind und über welches Feld sie miteinander verknüpft sind.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  9. #9
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von tombe Beitrag anzeigen
    ... und über welches Feld sie miteinander verknüpft sind.
    [ArtikelNr]. Siehe sein SQL
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  10. #10
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    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.
    Angehängte Dateien Angehängte Dateien
     

  11. #11
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Und ich sollte erwähenen das sich im Verlauf der anderen Tabellen der Primärschlüssel ändert oder manchmal gar keiner vorhanden ist, da ich manche Tabellen per Abfrage erstellt habe.
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Sorry, ich öffne aus Sicherheitsgründen keine fremden DBs. (Makros und Anderes)

    Aber ev. hast du ja mal Lust zu beschreiben (am besten mit einem Beispiel) Was du hast und was du willst.
    Siehe dazu mein Beispiel oben wo ich ein Beispiel machte mit meiner Annahme, was du hast.

    Achja, ohne Antwort auf Post #7 gibts auch keine weitere Hilfe von meiner Seite.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  13. #13
    starbug starbug ist offline Mitglied Gold
    Registriert seit
    Jan 2011
    Beiträge
    191
    Also zu deinem Post #7. Du lässt dir ja alles anzeigen was ArtikelNr 1 hat. Ich möchte aber das alle Artikel angezeigt werden zu denen es weitere Details gibt. Kann ich hier nen Screeshot posten? Das wäre glaub ich am besten.
     

  14. #14
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Mach ein Beispiel.
    Deine Erklärungen widersprechen sich seit dem ersten Posting und verwirren immer mehr.

    Wie so ein Beispiel aussehen kann siehst du im Post #7.

    Also, ich Versuchs trotzdem. Ich vergesse einfach mal was du bisher geschrieben hast und betrachte nur dein SQL und deine letzte Aussage (Post #13).
    Warum gibtst du Felder der Tabelle1 und Tabelle2 aus? Wenn du diese Felder weglässt, kannst du einen DISTINCT anwenden. Aber nur wenn du keine Ausgabe der Tabelle1 und Tabelle2 machst. Denn nur dann hast du je eine eindeutige Zeile pro Artikelnummer welche in beiden anderen Tabellen vorhanden ist.
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    
    SELECT DISTINCT
        Artikel.ArtikelNr
    FROM 
        Artikel 
        INNER JOIN Tabelle2 ON 
            Artikel.ArtikelNr = Tabelle2.ArtikelNr
        INNER JOIN Tabelle1 
            ON artikel.ArtikelNr = Tabelle1.ArtikelNr
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  15. #15
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Zitat Zitat von starbug Beitrag anzeigen
    Kann ich hier nen Screeshot posten? Das wäre glaub ich am besten.
    Ja in dem du ihn als Bild speicherst und dieses dann hier einstellst.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

Ähnliche Themen

  1. Problem mit einer SQL Abfrage
    Von DerKleene1 im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 24.08.07, 16:51
  2. Problem bei einer Abfrage
    Von aro69 im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 02.04.07, 23:10
  3. Problem bei einer Abfrage
    Von aro69 im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 02.04.07, 12:55
  4. Problem mit einer DB Abfrage
    Von webteddy im Forum PHP
    Antworten: 2
    Letzter Beitrag: 26.08.05, 14:36
  5. Antworten: 3
    Letzter Beitrag: 28.07.03, 10:08