Heim >Datenbank >MySQL-Tutorial >Warum schlägt „SELECT DISTINCT' bei mehreren Feldern in MySQL fehl?
Mysql-Optimierung: Verständnis der „SELECT DISTINCT“-Einschränkungen
In MYSQL wird die „SELECT DISTINCT“-Klausel verwendet, um doppelte Zeilen basierend auf zu entfernen angegebenen Spaltenwerte. Beim Versuch, mehrere Felder auszuwählen, können jedoch bestimmte Einschränkungen auftreten.
Problem:
Bei Verwendung von „SELECT DISTINCT“ gefolgt von einer durch Kommas getrennten Liste von Feldern und einer weiteren „DISTINCT“-Klausel, wie im folgenden Beispiel gezeigt, tritt ein Fehler auf:
mysql_query("SELECT *, DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
Erklärung:
Im Gegensatz zu einer Funktion, die für einzelne gilt Spalten ist „DISTINCT“ ein Abfragemodifikator, der sich auf alle Spalten in der Auswahlliste auswirkt. Duplikate werden nur entfernt, wenn alle Spalten in der Auswahl identische Werte haben.
Daher versucht die Abfrage, Zeilen auszugeben, die auf der Grundlage aller Spalten unterschiedlich sind, einschließlich derjenigen, die in der durch Kommas getrennten Liste und „ticket_id“ angegeben sind. Dies führt zu Mehrdeutigkeiten, da unklar ist, welche Spalten für die Eindeutigkeit berücksichtigt werden sollten.
Lösung:
Um alle Felder auszuwählen und Duplikate basierend auf „ticket_id“ zu entfernen Die korrekte Syntax lautet:
SELECT DISTINCT *, ticket_id FROM temp_tickets ORDER BY ticket_id
Diese Abfrage entfernt Duplikate basierend auf den kombinierten Werten aller Spalten, einschließlich „ticket_id“. Es wird jedoch weiterhin nur der neueste Eintrag für jeden eindeutigen „ticket_id“-Wert angezeigt. Um nur die neuesten Einträge für alle Spalten abzurufen, kann eine Unterabfrage verwendet werden, um die maximale Ticket_ID für jeden einzelnen „Ticket_ID“-Wert wie folgt auszuwählen:
SELECT * FROM temp_tickets WHERE ticket_id IN (SELECT MAX(ticket_id) FROM temp_tickets GROUP BY ticket_id)
Das obige ist der detaillierte Inhalt vonWarum schlägt „SELECT DISTINCT' bei mehreren Feldern in MySQL fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!