Dupletten in einer n:m-Verknüpfungstabelle aufspühren?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dupletten in einer n:m-Verknüpfungstabelle aufspühren?

    Hallo Leute,
    ich stehe mal wieder auf dem Schlauch, ich habe eine
    Tabelle mit zwei Spalten:

    +-----+------+
    | s_id | w_id |
    +-----+------+

    ...diese Tabelle ist eine n:m-Verknüpungstabelle, und
    ich habe den dunklen Verdacht, dass mir eine Zeile
    doppelt reingerutscht ist.

    Leider handelt es sich um 500.000 Zeilen und ich muss
    es irgendwie Schaffen, dass mir die Query die Dupletten
    zurückliefert.

    Jetzt weiß ich nicht ob ich mich zu doof anstelle, oder
    dieser Vorgang aus Performanzgründen sich nicht in
    einer Query erledigen lässt?

    SELECT r1.*, COUNT(r1.s_id) as anz
    FROM rel_seite_wort r1, rel_seite_wort r2
    WHERE r1.s_id = r2.s_id
    AND r1.w_id = r2.w_id
    GROUP BY s_id
    HAVING anz > 1

    ...ich dachte mit dieser Abfrage müsste es gehen, doch
    kann ich Sie leider nicht wirklich testen, da der MySQL-DBS
    anfängt zu rechnen und nicht mehr aufhört.
    Was sagt ihr dazu?

    Vielen Dank für das Lesen und einen schönen Tag noch,
    Holger

  • #2
    alles BS
    Zuletzt geändert von CHnuschti; 05.09.2002, 21:51.

    Kommentar


    • #3
      Bei dir sollte es
      GROUP BY r1.s_id
      heissen.

      Dennoch, ich hab diese Query bei mir probiert; Resultat=> es werden sämtliche Datensätze der Table gefunden
      Sachen gibts.
      mfg

      Kommentar


      • #4
        Du kannst über die beiden Felder einen Unique key legen, dann sind doppelte Einträge nicht möglich.
        [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
        [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
        [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

        © Harald Schmidt

        Kommentar


        • #5
          Jippie,
          vielen Dank, jetzt bin ich um einiges Schlauer,

          denn MySQL meldete:
          Duplicate entry '1486-37896' for key 1

          bei:
          ALTER TABLE rel_seite_wort ADD PRIMARY KEY(s_id, w_id)

          dann:
          Tabelle loeschen und neu indizieren, mal
          sehen ob es klappt.

          vielen Dank, und netten Gruß an euch beide, Holger

          PS.: Die Abfrage würde mich natürlich immer noch
          interessieren.

          Kommentar


          • #6
            Wieso Tabelle löschen und neu indizieren ?

            Lösche die doppelten Eintrag '1486-37896' und dann nochmal ALTER TABLE rel_seite_wort ADD PRIMARY KEY(s_id, w_id)
            [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
            [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
            [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

            © Harald Schmidt

            Kommentar


            • #7
              Jup, stimmt doch ich muss ja
              den Fehler finden der den
              doppelten Eintrag verursacht,
              auch echt eklig...;-)

              mfg, Holger

              Kommentar


              • #8
                Hi, habe jetzt den Fehler gefunden:

                Sonderzeichen haben das Problem verursacht.

                Das Wort: "eintrag" war einmal normal geschrieben,
                und ein anderes mal mit so einem komischen: "i".

                PHP hat diese Wörter als verschieden betrachtet,
                und wollte daher das zweite Wort in die Indizierung
                aufnehmen.

                MySQL hat hingegen, zumindest in der Select-Abfrage,
                die beiden Wörter als identisch betrachtet, so dass
                das zweite Wort zu _unrecht_ in die Indizierung auf-
                genommen wurde.

                Bei Groß- und Kleinschreibung kannte ich dieses
                Verhalten von MySQL, aber bei Sonderzeichen noch
                nicht.

                Wenn man den Spalten das Attribut binary spendiert,
                müsste die Unterscheidung klappen, oder?

                viele nette Grüße, Holger

                Kommentar


                • #9
                  binary würde ich nicht empfehlen, denn du willst ja keine Unterscheidung zwischen Groß- und Kleinschreibung - das bei einer Suche meiner Meinung nach nicht so sinnvoll.

                  Meine Idee wäre:
                  Die Sonderzeichen könntest du aus den Wörtern per Regex einfach löschen, sowohl vor dem Indizieren als auch vor dem Suchen danach.
                  So stören dann z.b. Punkte, Kommatas oder auch solche komischen i-s wie du sie nennst nicht mehr.
                  [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                  [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                  [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                  © Harald Schmidt

                  Kommentar


                  • #10
                    Ja, vielen Dank,
                    dass werde ich mal probieren.
                    netten Gruß, hOk

                    Kommentar

                    Lädt...
                    X