Announcement

Collapse
No announcement yet.

Datensätze werden doppelt angezeigt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensätze werden doppelt angezeigt

    Hallo,

    folgendes Problem:
    Ich habe ein recht langes SQL-Statement (betrifft 12 Tabellen).
    Diese habe ich meistens mit einem LEFT JOIN und zweimal mit einem INNER JOIN verbunden. Dazu noch ein DISTINCT.

    Die Haupttabelle, auf die sich alles bezieht, besitzt einen Datensatz.
    Die Tabelle mit den meisten Einträgen, die sich auf die Haupttabelle bezieht besitzt 5 Einträge.

    Nun hab ich das Problem, dass am Ende nicht 5 Datensätze sonder 10 angezeigt werden.

    Kann mir jemand sagen, an was das liegen könnte?

    Die Query zu posten macht wahrscheinlich wenig Sinn?!
    Sonst werden vermutlich auch noch die Tabellen und deren Verknüpfungen benötigt ... ?!

  • #2
    Wie wärs denn wenn Du Dein Query einfach mal reduzierst und schaust welches Statement die doppelten Datensätze erzeugt. Wenn Du wirklich nur INNER und LEFT JOINs verwendest, dann sollte das eigentlich nicht vorkommen, ausser die Daten sind wirklich in der Haupttabelle doppelt.

    Comment


    • #3
      Natürlich macht das Sinn, die Query zu posten, erst Recht mit Daten, wenn die schon so übersichtlich sind.
      Anhand Deiner Angaben kann man höchstens vermuten, dass Du schlicht einen Join vergessen hast und zwar auf eine Tabelle die 2 Datensätze enthält.
      Gruß, defo

      Comment


      • #4
        Ich habe jetzt mal nachgeschaut - an diesen Tabellen sollte es liegen:

        Code:
        HAUPTTABELLE
        tblrepairdata
        *id
        repairno
        ...
        ...
        
        NEBENTABELLE1
        tblsparepart
        *id
        repairno 
        name
        ...
        
        NEBENTABELLE2
        tblcost
        *id
        repairno
        name
        ...
        Code:
        SELECT a.repairno, b.name, c.name
        FROM tblrepairdata a
        LEFT JOIN tblsparepart b ON a.repairno = b.repairno
        LEFT JOIN tblcost c ON a.repairno = c.repairno
        WHERE arepairno = 5
        In der Tabelle tblsparepart habe ich 2 Einträge für die repairno 5.
        In tblcost sind es 5 Einträge für repairno = 5.
        ==> 10 Einträge

        Ich möchte aber genau nur diese 5 Einträge der tblsparepart erhalten.
        Wie kann ich das dann umsetzten?

        Ich möchte nicht mehrere Querys schreiben ... außer Ihr sagt, anderst sei das nicht zu lösen.

        Comment


        • #5
          Wenn ich mich nicht täusche, kann das eigentlich nur sein, wenn der "Schlüssel". über den Du joinst, in den 2 DS identisch ist. Aber das müsste Dir ja eigentlich auffallen.
          Gruß, defo

          Comment


          • #6
            Wie meinst Du das mit, der Schlüssel identisch ist?

            Code:
            FROM tblrepairdata a
            LEFT JOIN tblsparepart b ON a.repairno = b.repairno
            LEFT JOIN tblcost c ON a.repairno = c.repairno
            WHERE a.repairno = 5
            Wäre hier der Schlüssel die repairno?!

            Comment


            • #7
              Ja, das Feld, das Du als Schlüssel benutzt, hat vermutlich in beiden Sätzen den gleichen Wert.
              Gruß, defo

              Comment


              • #8
                In Ordnung, dann liegt es an dem Schlüssel.
                Gibt es denn eine Möglichkeit das Problem zu beheben, oder muss ich dann (wenn ich wirklich nur 5 Datensätze möchte und nicht 10) eine extra Query schreiben?!

                Comment


                • #9
                  Es wird ja irgendeinen Grund geben, dass Du aus sparepart selektierst oder darüber joinst. Anhand des left join, gehst Du ja offenbar sowieso davon aus, dass dort nicht unbedingt was drinsteht. Da Du nicht mal eine Select Clause angibst, kann man nur spekulieren, was Du erreichen willst.
                  Im Prinzip musst Du duch Deine join Kriterien für Eindeutigkeit sorgen, also einzelne Tabellen weiter einschränken.
                  Gruß, defo

                  Comment

                  Working...
                  X