Entwickler-Ecke

Datenbanken - SQL, suche nach Duplikaten


Hänsel - Mi 07.12.16 11:18
Titel: SQL, suche nach Duplikaten
Hallo,
ich benötige wieder einmal Hilfe.
Habe eine MSSQL-Datenbank. Wie kann ich auf schnellsten Weg in einer Tabelle nach (Feld "Gerätenummer") Duplikaten suchen. und auch diese gleich anzeigen lassen?

Im Voraus besten Dank
Hänsel


ub60 - Mi 07.12.16 11:43

Meinst Du so etwas?


SQL-Anweisung
1:
2:
3:
4:
SELECT Gerätenummer, COUNT(Gerätenummer) AS Anzahl
FROM Geräte
GROUP By Gerätenummer
ORDER BY Anzahl DESC

Hier werden alle Dopplungen (oder mehrfaches Auftreten gezeigt). Eventuell könntest Du noch alle herausfiltern, deren Anzahl=1 ist.

ub60


JDommi - Mo 11.12.17 15:50

Ich habe das gleiche Problem mit einer Access-Datenbank. Leider funktioniert dieser SQL-Select bei mir nicht.

Meine Voraussetzungen:
Access-Datenbank und Delphi 7 mit ADOQuery.

Tabelle "People"
PeopleID Name WebPage
1 Name 1 Page 1
2 Name 2 Page 2
3 Name 3 (NULL)
4 Name 4 Page 2
5 Name 5 Page 1
6 Name 6 Page 3
7 Name 7 (NULL)
8 Name 8 Page 4

Select alle Datensätze die eine identische WebPage haben, aber nicht NULL sind und gruppiere diese nach WebPage

gewünschtes Ergebnis:
PeopleID Name WebPage
1 Name 1 Page 1
5 Name 5 Page 1
2 Name 2 Page 2
4 Name 4 Page 2

Versuche:
1.

SQL-Anweisung
1:
2:
3:
4:
5:
SELECT PeopleID, Name, WebPage FROM People 
WHERE (SELECT COUNT(B.WebPage) 
FROM People AS B 
WHERE B.WebPage= WebPage) > 1 
ORDER BY WebPage


2.

SQL-Anweisung
1:
2:
3:
4:
5:
SELECT PeopleID, Name, WebPage 
FROM People T1, 
(SELECT COUNT(WebPage) AS ANZAHL 
FROM People 
GROUP BY WebPage, PeopleID, Name) T2 WHERE T2.ANZAHL > 1 AND T1.WebPage = T2.WebPage


3.

SQL-Anweisung
1:
2:
3:
4:
5:
SELECT PeopleID, Name, WebPage, COUNT(WebPage) AS Anzahl 
FROM People 
WHERE WebPage <> NULL AND Anzahl > 1 
GROUP By WebPage, Name, PeopleID 
ORDER BY Anzahl DESC

Irgendwie bekomme ich immer nur den Fehler "fehlender Standardwert".


Im Moment arbeite ich mit

SQL-Anweisung
1:
2:
3:
SELECT PeopleID, Name, WebPage, Web_ID 
FROM People 
ORDER BY WebPage

und vergleiche die Werte für WebPage in einer Schleife.


Vielen Dank schon mal für die Hilfe!

JDommi


Ralf Jansen - Mo 11.12.17 20:10

Etwa so


SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
SELECT * 
  FROM People p1
 WHERE EXISTS (SELECT * 
                 FROM People p2
                WHERE p1.WebPage = p2.WebPage
                  AND p1.PeopleID != p2.PeopleID)
 ORDER BY WebPage


http://sqlfiddle.com/#!6/f1952/3

zum testen, ist zwar für'n SqlServer aber ist ja sehr rudimentäres Sql das auch in Access funktionieren sollte


JDommi - Di 12.12.17 00:41

Leider bekomme ich damit folgende Meldung:
Syntaxfehler in Abfrageausdruck 'EXISTS (SELECT * FROM People p2 WHERE p1.WebPage = p2.WebPage AND p1.PeopleID != p2.PeopleID)'

Korrektur:
Jetzt klappt es! Ich musste nur != durch <> ersetzen :)

Besten Dank!!!