SQL bietet einfache Möglichkeiten, doppelte Werte zu filtern. Das Schlüsselwort DISTINCT filtert doppelte Einträge und sorgt somit dafür, dass jeder Wert nur einmal ausgegeben wird.
Um doppelte Werte filtern zu können, müssen wir erst einen Wert eingeben:
test=# INSERT INTO t_person VALUES ('9876', 'Gaika Huber');
INSERT 4900003 1
Wollen wir nun alle doppelten Werte filtern, setzen wir einfach DISTINCT vor die SELECT Clause:
test=# SELECT DISTINCT name FROM t_person;
name
---------------
Anton Jelinek
Gaika Huber
Josef Fischer
Leo Lechner
Markus Eisner
(5 rows)
Wie Ihnen vielleicht aufgefallen ist, haben wir bewusst nur eine Spalte aus der Tabelle ausgewählt. Hätten wir beide Spalten in der SELECT Clause gelistet, hätten wir sechs Werte im Ergebnis vorgefunden:
test=# SELECT DISTINCT svnr, name FROM t_person; svnr | name ----------+--------------- 123456 | Markus Eisner 12345678 | Leo Lechner 2345 | Gaika Huber 2456 | Josef Fischer 24567 | Anton Jelinek 9876 | Gaika Huber (6 rows)
Der Grund dafür ist, dass der DISTINCT Filter auf beide Spalten wirkt. Da Gaika Huber zwar zweimal vorkommt aber die beiden Datensätze sich unterscheiden, werden keine Datenzeilen ausgelassen.
Wollen Sie sicherstellen, dass keine doppelten Namen vorkommen, müssen Sie eine ON Clause in das Statement einbauen:
test=# SELECT DISTINCT ON (name) svnr, name FROM t_person; svnr | name ----------+--------------- 24567 | Anton Jelinek 2345 | Gaika Huber 2456 | Josef Fischer 12345678 | Leo Lechner 123456 | Markus Eisner (5 rows)
In diesem Fall bekommen wir wieder fünf Werte.