Heim >Datenbank >MySQL-Tutorial >Wie gehe ich mit doppelten Zeilen um, wenn ich SELECT DISTINCT mit mehreren Tabellen in MySQL verwende?

Wie gehe ich mit doppelten Zeilen um, wenn ich SELECT DISTINCT mit mehreren Tabellen in MySQL verwende?

DDD
DDDOriginal
2024-12-08 19:17:10436Durchsuche

How to Handle Duplicate Rows When Using SELECT DISTINCT with Multiple Tables in MySQL?

SELECT DISTINCT mit mehreren Tabellen in MySQL

In der MySQL-Abfrage verwenden Sie eine implizite Verknüpfung zwischen den Tabellen „drinks“ und „drinks_photos“ ohne alle Bedingungen in der WHERE-Klausel. Dies führt zu einem kartesischen Produkt, das fünf Zeilen mit wiederholten Werten für Name und Preis ergibt. Um diese Duplikate zu beseitigen, können Sie die SELECT DISTINCT-Klausel verwenden.

Wenn Sie jedoch alle Fotos für jedes Getränk beibehalten möchten, können Sie nicht einfach SELECT DISTINCT verwenden, da dadurch nur unterschiedliche Zeilen zurückgegeben werden. Stattdessen müssen Sie eine Kombination aus Gruppierungs- und Aggregatfunktionen verwenden.

Gruppierungs- und Aggregatfunktionen

Gruppierung aggregiert Zeilen basierend auf einer oder mehreren angegebenen Spalten. In diesem Fall möchten Sie die Ergebnisse nach „drinks_id“ gruppieren, um eine Zeile pro Getränk zu erhalten. Sie können dann eine Aggregatfunktion verwenden, um den gewünschten Wert für jedes gruppierte Ergebnis auszuwählen.

Um beispielsweise das erste Foto für jedes Getränk abzurufen, können Sie Folgendes verwenden:

SELECT name, price, MIN(photo) AS photo
FROM drinks
JOIN drinks_photos ON drinks.id = drinks_id
GROUP BY drinks_id;

Die MIN () Die Aggregatfunktion gibt jeweils den Mindestwert der Fotospalte zurück Gruppe.

GROUP_CONCAT

Wenn Sie alternativ alle Fotos für jedes Getränk in einer einzigen Zeichenfolge verketten möchten, können Sie die Funktion GROUP_CONCAT() verwenden:

SELECT name, price, GROUP_CONCAT(photo, ',') AS photos
FROM drinks
JOIN drinks_photos ON drinks.id = drinks_id
GROUP BY drinks_id;

Beachten Sie jedoch, dass GROUP_CONCAT() keine Standard-SQL-Aggregatfunktion ist und ihre Verwendung von Land zu Land unterschiedlich sein kann Datenbanken.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit doppelten Zeilen um, wenn ich SELECT DISTINCT mit mehreren Tabellen in MySQL verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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