Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit DISTINCT alle Spalten in einer SQL-Abfrage abrufen?
Alle Spalten mit DISTINCT in SQL-Abfragen abrufen
Das Schlüsselwort DISTINCT
in SQL entfernt doppelte Zeilen basierend auf angegebenen Spalten. Allerdings bedarf es sorgfältiger Überlegung, alle Spalten abzurufen und gleichzeitig nur unterschiedliche Werte in einer Teilmenge der Spalten anzuzeigen. Die einfache Verwendung von SELECT DISTINCT *
wird nicht in allen Datenbanksystemen zuverlässig unterstützt.
Lösungen für den vollständigen Spaltenabruf mit DISTINCT
Um dies zu erreichen, gibt es je nach Ihrem spezifischen Datenbanksystem mehrere Methoden:
ROW_NUMBER()
Fensterfunktion innerhalb einer Unterabfrage:<code class="language-sql">SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS row_number FROM table ) AS rows WHERE row_number = 1;</code>
Dadurch wird innerhalb jeder Partition (definiert durch field1
) eine eindeutige Zeilennummer zugewiesen, sortiert nach field2
. Die äußere Abfrage wählt dann nur die erste Zeile jeder Partition aus. Ersetzen Sie field1
und field2
durch die entsprechenden Spalten.
GROUP BY
-Klausel kann funktionieren, aber nur, wenn Sie garantieren können, dass alle anderen Spalten für jede eindeutige Kombination gruppierter Spalten denselben Wert haben. Dies ist oft nicht der Fall und kann zu unvorhersehbaren Ergebnissen führen.<code class="language-sql">SELECT * FROM table GROUP BY field1;</code>
DISTINCT ON
-Klausel, eine direktere Lösung:<code class="language-sql">SELECT DISTINCT ON (field1) * FROM table;</code>
Dadurch wird nur die erste Zeile für jeden eindeutigen Wert von field1
ausgewählt.
<code class="language-sql">SELECT * FROM table AS t1 INNER JOIN table AS t2 ON t1.field1 = t2.field1 INNER JOIN (SELECT field1, MIN(field2) AS min_field2 FROM table GROUP BY field1) AS distinct_fields ON t1.field1 = distinct_fields.field1 AND t1.field2 = distinct_fields.min_field2;</code>
Dadurch wird der Mindestwert von field2
für jedes einzelne field1
ermittelt und wieder mit der Originaltabelle verknüpft. Möglicherweise müssen Sie die Funktion MIN()
je nach gewünschtem Verhalten anpassen.
Denken Sie daran, "table"
, "field1"
und "field2"
durch Ihre tatsächlichen Tabellen- und Spaltennamen zu ersetzen. Der beste Ansatz hängt von Ihrem spezifischen Datenbanksystem und dem gewünschten Verhalten ab, wenn mehrere Zeilen dieselben unterschiedlichen Werte in den angegebenen Spalten haben.
Das obige ist der detaillierte Inhalt vonWie kann ich mit DISTINCT alle Spalten in einer SQL-Abfrage abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!