MySQL :: Aufgabe #5
3 Lösungen

Doppelte Datensätze finden
Fortgeschrittener - MySQL
von Gisbert5020
- 14.08.2018 um 15:02 Uhr
Oft ist es notwendig, aus einer Tabelle doppelte Sätze heraus zu filtern.
Schreibe eine Abfrage. mit der man doppelte Sätze finden kann.
Schreibe eine Abfrage. mit der man doppelte Sätze finden kann.
Lösungen:
Tabelle duplicate_table:
SQL-Code
Insert:
SQL-Code
Select der doppelten Einträge:
SQL-Code
Da doppelte Einträge in einer Tabelle wohl meist unsinnig sind werde ich sie auch gleich löschen:
SQL-Code
Ergebnis nach DELETE:

CREATE TABLE IF NOT EXISTS `duplicate_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `sensor_id` int(11) NOT NULL, `value` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1
Insert:

INSERT INTO `duplicate_table` (`id`, `sensor_id`, `value`) VALUES (1, 3, 20), (2, 4, 24), (3, 3, 24), (4, 4, 24), (5, 3, 20), (6, 5, 20)
Konsolenausgabe:
--------------------------------------
| id | sensor_id | value |
|--------|---------------|-----------|
| 1 | 3 | 20 |
| 2 | 4 | 24 |
| 3 | 3 | 24 |
| 4 | 4 | 24 | <-- DOPPELT
| 5 | 3 | 20 | <-- DOPPELT
| 6 | 5 | 20 |
--------------------------------------
Select der doppelten Einträge:

SELECT d1.* FROM duplicate_table d1, duplicate_table d2 WHERE d1.id > d2.id AND d1.sensor_id = d2.sensor_id AND d1.value = d2.value
Da doppelte Einträge in einer Tabelle wohl meist unsinnig sind werde ich sie auch gleich löschen:

DELETE d1 FROM duplicate_table d1, duplicate_table d2 WHERE d1.id > d2.id AND d1.sensor_id = d2.sensor_id AND d1.value = d2.value
Ergebnis nach DELETE:
Konsolenausgabe:
--------------------------------------
| id | sensor_id | value |
|--------|---------------|-----------|
| 1 | 3 | 20 |
| 2 | 4 | 24 |
| 3 | 3 | 24 |
| 6 | 5 | 20 |
--------------------------------------

SELECT GROUP_CONCAT(id), name FROM test.new_table GROUP BY name HAVING COUNT(name) > 1;
Die Zeilen, bei denen in der Spalte "name" Dopplungen festgestellt wurden, werden kommasepariert aufgelistet (jeweils der Primary Key "id")
Auszug aus einer Blog Datenbank. Ich möchte herausfinden welche Authoren mehrere Posts geschreiben haben.
Tabelle: posts
Felder:
title = Titel
body = Post Eintrag
author = Verfasser des Posts
So könnte das Script aussehen:
SQL-Code
Tabelle: posts
Felder:
title = Titel
body = Post Eintrag
author = Verfasser des Posts
So könnte das Script aussehen:

SELECT title, body, author FROM posts WHERE author IN ( SELECT author FROM posts GROUP BY author HAVING Count(1)>1 );