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:
Insert:
Select der doppelten Einträge:
Da doppelte Einträge in einer Tabelle wohl meist unsinnig sind werde ich sie auch gleich löschen:
Ergebnis nach DELETE:
SQL-Code
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:
SQL-Code
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:
SQL-Code
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:
SQL-Code
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 |
--------------------------------------
SQL-Code
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:
Tabelle: posts
Felder:
title = Titel
body = Post Eintrag
author = Verfasser des Posts
So könnte das Script aussehen:
SQL-Code
SELECT title, body, author FROM posts WHERE author IN ( SELECT author FROM posts GROUP BY author HAVING Count(1)>1 );