MySQL :: Aufgabe #5

3 Lösungen Lösungen öffentlich

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.

Lösungen:

vote_ok
von Gustl (5960 Punkte) - 16.08.2018 um 19:45 Uhr
Tabelle duplicate_table:
Quellcode ausblenden 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:
Quellcode ausblenden 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:
Quellcode ausblenden 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:
Quellcode ausblenden 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 |
--------------------------------------
vote_ok
von Exception (3130 Punkte) - 12.09.2018 um 12:46 Uhr
Quellcode ausblenden 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")
vote_ok
von rhensky (40 Punkte) - 03.10.2018 um 01:48 Uhr
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:

Quellcode ausblenden SQL-Code
SELECT title, body, author FROM posts WHERE author
IN (
   SELECT author 
   FROM posts 
   GROUP BY author 
   HAVING Count(1)>1
);