MySQL: DISTINCT für die Auswahl mehrerer Spalten verstehen
Beim Umgang mit doppelten Zeilen in MySQL-Tabellen kann das Schlüsselwort DISTINCT verwendet werden, um eindeutige Zeilen abzurufen Es kann jedoch auch zu Einschränkungen bei der Auswahl mehrerer Spalten kommen. In diesem Artikel geht es um das Problem des Abrufens aller Felder bei der Verwendung von DISTINCT sowie um eine Lösung zum Auswählen des neuesten Eintrags für doppelte Zeilen.
Einschränkungen von DISTINCT für mehrere Spalten
DISTINCT ist keine Funktion, die nur für bestimmte Spalten gilt. Stattdessen handelt es sich um einen Abfragemodifikator, der sich auf alle Spalten in der Auswahlliste auswirkt. Es entfernt doppelte Zeilen, in denen die Werte aller Spalten identisch sind.
Korrekte Syntax für DISTINCT
DISTINCT muss unmittelbar nach SELECT erscheinen (zusammen mit andere Abfragemodifikatoren wie SQL_CALC_FOUND_ROWS). Nach den Abfragemodifikatoren sollten die Spaltennamen aufgelistet werden.
Zum Beispiel:
<code class="sql">SELECT DISTINCT foo, ticket_id FROM table...</code>
Diese Abfrage gibt eine Zeile für jedes eindeutige Wertepaar über „ticket_id“ und „foo“ aus.
Lösung für die Auswahl aller Spalten
Es ist nicht möglich, alle Felder auszuwählen und trotzdem DISTINCT zu verwenden, da alle Spalten identisch sein müssen, um Duplikate zu entfernen. Es gibt jedoch eine Problemumgehung, mit der Sie den neuesten Eintrag für doppelte Zeilen auswählen können:
<code class="sql">SELECT t1.* FROM table AS t1 JOIN ( SELECT ticket_id, MAX(row_id) AS max_id FROM table GROUP BY ticket_id ) AS t2 ON t1.ticket_id = t2.ticket_id AND t1.row_id = t2.max_id</code>
Diese Abfrage verwendet eine Unterabfrage, um die maximale Zeilen-ID für jede Ticket-ID zu finden, und verknüpft dann die Haupttabelle mit der Unterabfrage um die neueste Zeile für jede Ticket_ID auszuwählen.
Das obige ist der detaillierte Inhalt vonWie wähle ich alle Spalten mit DISTINCT in MySQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!