Entwickler-Ecke
Datenbanken - SQL nur doppelte Einträge anzeigen
derDoc - Mo 07.04.03 07:32
Titel: SQL nur doppelte Einträge anzeigen
Kann mir jemand sagen, wie ich es schaffe, mir nur die doppelten Einträge in meiner Datenbank anzeigen zu lassen?
Andi1982 - Mo 07.04.03 08:11
Hi,
also erstmal was grundsätzliches, es sollte nie vorkommen dass in einer Tabelle doppelte einträge vorhanden sind. Ich bin jetzt mal davon ausgegangen du meinst doppelte einträge in der selben tabelle.
Hab dir mal nen kurzen SQL gebastelt mit dem es gehen müsste!
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| SELECT * FROM TABLE1 T1, (SELECT COUNT(*) AS ANZAHL FROM SELBETABELLEWIE1 GROUP BY FELD1, FELD2, FELD3, FELD4, .... ) T2 WHERE T2.ANZAHL = 2 AND T1.FELD1 = T2.FELD1 AND T1.FELD2 = T2.FELD2 AND T1.FELD3 = T2.FELD3 AND T1.FELD4 = T2.FELD4 AND T1.FELD5 = T2.FELD5 ... |
In diesem Fall wird der fall der doppelt ist aber auch doppelt ausgegeben. Wenn du dies verhindern willst solltest du hinten noch eine Group By anweisung dranhängen!
Wenn du fragen hast einfach melden!!!
Gruß andi
derDoc - Mo 07.04.03 10:53
Danke Andi.
Ich benötige das, um eine Adresstabelle auf doppelte Einträge zu prüfen, die dort nunmal vorkommen können.
Was meinst du mit noch einer GROUP BY Anweisung?
Andi1982 - Mo 07.04.03 12:11
Hi,
also ich hab das mal ausprobiert, wenn eine Datenbank richtig angelegt ist, also indexfelder richtig vergeben usw. dann wirst du es kaum schaffen doppelte datensaetze zu erzeugen.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| SELECT * FROM TABLE1 T1, (SELECT COUNT(*) AS ANZAHL FROM SELBETABELLEWIE1 GROUP BY FELD1, FELD2, FELD3, FELD4, .... ) T2 WHERE T2.ANZAHL = 2 AND T1.FELD1 = T2.FELD1 AND T1.FELD2 = T2.FELD2 AND T1.FELD3 = T2.FELD3 AND T1.FELD4 = T2.FELD4 AND T1.FELD5 = T2.FELD5 ... |
Mit diesem SQL bekommst du jede zeile immer doppelt zurueck.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| SELECT * FROM TABLE1 T1, (SELECT COUNT(*) AS ANZAHL FROM SELBETABELLEWIE1 GROUP BY FELD1, FELD2, FELD3, FELD4, .... ) T2 WHERE T2.ANZAHL = 2 AND T1.FELD1 = T2.FELD1 AND T1.FELD2 = T2.FELD2 AND T1.FELD3 = T2.FELD3 AND T1.FELD4 = T2.FELD4 AND T1.FELD5 = T2.FELD5 ... GROUP BY FELD1, FELD2, FELD3, FELD4, .... |
Hier bekommst du aber nur eine Ergebniszeile zurueck. Hat aber den nachteil dass du nicht erkennst wie oft es nur wirklich vorhanden ist. du koenntest es hoechstens noch so machen
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| SELECT *, T2.Anzahl FROM TABLE1 T1, (SELECT COUNT(*) AS ANZAHL FROM SELBETABELLEWIE1 GROUP BY FELD1, FELD2, FELD3, FELD4, .... ) T2 WHERE T2.ANZAHL > 2 AND T1.FELD1 = T2.FELD1 AND T1.FELD2 = T2.FELD2 AND T1.FELD3 = T2.FELD3 AND T1.FELD4 = T2.FELD4 AND T1.FELD5 = T2.FELD5 ... GROUP BY FELD1, FELD2, FELD3, FELD4, .... |
So bekommst du nur eine Zeile zurueck und ausserdem noch wie oft der Satz in der Datenbank vorkommt!
Gruß andi
derDoc - Mo 07.04.03 14:22
Nochmal danke Andi, ich werde das mal testen.
Luncustaf - Mo 07.04.03 18:09
nach einem GROUP BY solltest du anstatt WHERE nen HAVING verwenden
gr€€tz
Cashels - Di 08.04.03 18:26
Oder mit einer ganz gewagten Abfrage:
Quelltext
1: 2: 3:
| select distinct t1.Feld1, t1.Feld2 from Tabelle1 t1, Tabelle2 t2 where t1.Feld1=t2.Feld1 and t1.Feld2=t2.Feld2 and t1.ID <> t2.ID |
Dabei geh ich davon aus, daß die Tabelle einen Primäindex ID hat. Die Abfrage liefert nur die Datensätze für welche Feld1 und Feld2 übereinstimmen.
Gruß,
Tom
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!