MySQL Doppelte einträge

02/28/2016 14:52 qooc#1
Hallo,

wie kann man Doppelte einträge nur einmal ausgeben?

Also ich habe in der Tabelle ' Test ' die Spalten ID und UNIQE_ID.

ID ist auf Primärschlüssel gesetzt und UNIQE_ID kommt doppelt vor
z.B:

PHP Code:
+----+-----------+
id UNIQE_ID 
+----+-----------+
|  
|     iHfv     |
|  
|     iHfv     |
|  
|     iHfv     |
|  
|     p0K2  |
|  
|     4mL2  |
|  
|     4mL2  |
+----+-----------+ 
Wie kann ich nun nur die NICHT doppelten Uniqe IDs auslesen also so:
PHP Code:
|  |     iHfv     |
|  
|     p0K2  |
|  
|     4mL2  
Hoffe mir wird hier geholfen.
02/28/2016 15:04 Kentika#2
[Only registered and activated users can see links. Click Here To Register...]
02/28/2016 15:04 Shadow992#3
Quote:
Originally Posted by qooc View Post
Hallo,

wie kann man Doppelte einträge nur einmal ausgeben?

Also ich habe in der Tabelle ' Test ' die Spalten ID und UNIQE_ID.

ID ist auf Primärschlüssel gesetzt und UNIQE_ID kommt doppelt vor
z.B:

PHP Code:
+----+-----------+
id UNIQE_ID 
+----+-----------+
|  
|     iHfv     |
|  
|     iHfv     |
|  
|     iHfv     |
|  
|     p0K2  |
|  
|     4mL2  |
|  
|     4mL2  |
+----+-----------+ 
Wie kann ich nun nur die NICHT doppelten Uniqe IDs auslesen also so:
PHP Code:
|  |     iHfv     |
|  
|     p0K2  |
|  
|     4mL2  
Hoffe mir wird hier geholfen.
Schau mal "distinct" an:
Quote:
SELECT DISTINCT column_name,column_name
FROM table_name
02/28/2016 15:11 qooc#4
Danke für eure Antoworten.

Ich habe auch noch eine andere Lösung gefunden und zwar GROUP BY
meine Frage nun was ist besser?

GROUP BY oder DISTINCT ?
02/28/2016 18:01 Shadow992#5
Quote:
Originally Posted by qooc View Post
Danke für eure Antoworten.

Ich habe auch noch eine andere Lösung gefunden und zwar GROUP BY
meine Frage nun was ist besser?

GROUP BY oder DISTINCT ?
Ich antworte nur vom Handy, daher kann ich nicht groß Bilder machen.
Aber vielleicht reicht eine Erklärung:

Prinzipiell ist Group By und Distinct erst einmal nicht vergleichbar, da sie total unterschiedliche Ergebnisse (intern in MySql) erzeugen. Da man aber normalerweise die Ergebnisse wie sie bei einem Group By entstehen nicht verwenden/darstellen kann, werden sie so umgeändert, dass es so aussieht als wäre Group By und Distinct dasselbe.

Ganzgrob (ohne auf exakte Details zu achte) funktioniert Group By so:
Der Befehl "gruppiert" alle Einträge in der Tabelle zu (mal ganz vereinfacht gesagt) neuen Tabellen. Das heißt jede neue Tabelle, die erstellt wird beinhaltet dann alle dieselben Werte, die bei dem Group By Attribut angegegben wurden.

Stell dir das an Hand dieser Tabelle vor:
Quote:
Id | Geburtsort
0 | München
1 | Berlin
2 | Köln
3 | Berlin
Ein "Group by Geburtsort" würde jetzt erst einmal folgende 3 Tabellen (intern) erzeugen:

Tabelle 1:
Quote:
Id | Geburtsort
0 | München
Tabelle 2:
Quote:
Id | Geburtsort
1 | Berlin
3 | Berlin
Tabelle 3:
Quote:
Id | Geburtsort
2 | Köln
Das heißt intern würdest du damit 3 Tabellen erzeugen und könntest mit "Having" jetzt Anfrage an die jeweils gruppierten Tabellen stellen. Willst du jetzt jedoch die Ergebnisse der Abfrage von SQL nach z.B. PHP bringen muss sich MySql eine Lösungsstrategie überlegen, immerhin kann man nicht einfach so mehrere Tabellen übergeben (und theoretisch ist das so auch nicht im Standard definiert).

Also entweder:
1. Group By ignorieren und alles zurückgeben oder
2. Immer nur das erste Element der Tabelle returnen

Beides hat Vor- und Nachteile intuitiver dürfte aber Lösung 2 sein, weil man Lösung 1 auch ohne Group By erreichen kann. Daher ist die Konvertierung in Lösung 2 logischer und auch implementiert.

Distinct hingegen geht alle Daten durch und nimmt immer nur den ersten Datensatz raus, wenn es mehrere gleiche gibt.

Die Wege sind also unterschiedlich, aber das Ergebnis (in PHP) ist dasselbe. Dennoch ist offensichtlich "Distinct" schneller und standardkonform, daher solltest du Distinct benutzen.
03/01/2016 11:28 Aeh'#6
Würde behaupten DISTINCT ist schneller.