Heim > Datenbank > MySQL-Tutorial > Wie wähle ich eindeutige Werte aus bestimmten Spalten aus und behalte dabei alle Spalten bei?

Wie wähle ich eindeutige Werte aus bestimmten Spalten aus und behalte dabei alle Spalten bei?

Patricia Arquette
Freigeben: 2025-01-18 20:52:12
Original
503 Leute haben es durchsucht

How to Select Distinct Values from Specific Columns While Keeping All Columns?

Eindeutige Spaltenwerte abrufen und dabei alle Spalten beibehalten

Die Herausforderung besteht darin, eindeutige Werte aus bestimmten Spalten auszuwählen (z. B. field1, field2) und gleichzeitig alle Spalten in der Ausgabe beizubehalten. Die einfache Verwendung von SELECT DISTINCT field1, * FROM table ist aufgrund der dadurch entstehenden Mehrdeutigkeit ungültig.

Effektive Lösungen:

1. Der GROUP BYAnsatz:

Die GROUP BY-Klausel bietet eine Lösung:

<code class="language-sql">SELECT *
FROM table
GROUP BY field1;</code>
Nach dem Login kopieren

Dadurch werden Zeilen basierend auf identischen field1-Werten gruppiert, sodass nur eindeutige field1-Werte entstehen. Beachten Sie jedoch, dass diese Methode zu unvorhersehbaren Ergebnissen für andere Spalten führen kann, sofern sie nicht ausdrücklich in der SELECT-Anweisung und der GROUP BY-Klausel enthalten ist.

2. Nutzung DISTINCT ON (datenbankspezifisch):

Einige Datenbanksysteme (nicht alle) unterstützen DISTINCT ON und ermöglichen so eine eindeutige Auswahl für bestimmte Spalten unter Beibehaltung aller Spalten:

<code class="language-sql">SELECT DISTINCT ON (field1) *
FROM table;</code>
Nach dem Login kopieren

Beachten Sie, dass das genaue Verhalten von DISTINCT ON je nach Datenbankplattform unterschiedlich sein kann.

3. Verwendung von Fensterfunktionen (PostgreSQL, Oracle, T-SQL usw.):

Datenbanken, die Fensterfunktionen unterstützen (wie PostgreSQL, Oracle und T-SQL), bieten eine robuste Lösung:

<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>
Nach dem Login kopieren

Dieser Ansatz weist innerhalb jeder Partition (definiert durch field1) eine Zeilennummer zu, sortiert nach field2. Das Endergebnis umfasst nur Zeilen mit row_number = 1, wodurch effektiv eindeutige field1-Werte ausgewählt werden, während alle Spalten erhalten bleiben.

4. Unterabfragen und Self-Joins (MySQL, SQLite usw.):

Für Datenbanken ohne Fensterfunktionen (z. B. MySQL, SQLite) ist eine Kombination aus Unterabfragen und Selbstverknüpfungen eine praktikable Alternative:

<code class="language-sql">SELECT t.*
FROM table t
WHERE (field1, field2, ...) IN (
    SELECT DISTINCT (field1, field2, ...)
    FROM table
);</code>
Nach dem Login kopieren

Dadurch werden Zeilen ausgewählt, in denen die Kombination von field1, field2 usw. innerhalb der Tabelle eindeutig ist. Denken Sie daran, die Spaltenliste innerhalb der IN-Klausel an Ihre spezifischen Bedürfnisse anzupassen.

Das obige ist der detaillierte Inhalt vonWie wähle ich eindeutige Werte aus bestimmten Spalten aus und behalte dabei alle Spalten bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage