Beim Ausführen von SELECT-Anweisungen, die Daten aus mehreren Tabellen zusammenführen, kann es, wie im Beispiel dargestellt, zu doppelten Zeilen kommen im bereitgestellten Szenario:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id
Diese Abfrage ruft 5 Zeilen für Getränke ab, mit Foto als das einzige eindeutige Feld. Allerdings werden Name und Preis wiederholt, was zu doppelten Zeilen für Getränke wie „Fanta“ führt.
Um diese Duplikate zu beseitigen, müssen Sie Gruppierung und Aggregation verwenden Funktionen. Durch die Gruppierung können Sie Zeilen basierend auf gemeinsamen Werten kombinieren, während Sie mit Aggregatfunktionen einen bestimmten Wert für jede Gruppe extrahieren können.
Wenn Sie eine einzelne Zeile für jedes Getränk wünschen, Unabhängig von der Anzahl der damit verbundenen Fotos können Sie nach der Getränke-ID gruppieren:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id
Diese Abfrage wird return:
name | price | photo |
---|---|---|
fanta | 5 | ./images/fanta-1.jpg |
dew | 4 | ./images/dew-1.jpg |
Wenn Sie lieber eine Reihe von Fotos für jedes Getränk haben möchten, bietet MySQL die Funktion GROUP_CONCAT, die Werte aus derselben Gruppe verkettet:
SELECT name, price, GROUP_CONCAT(photo, ',') FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id
Diese Abfrage wird yield:
name | price | photo |
---|---|---|
fanta | 5 | ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg |
dew | 4 | ./images/dew-1.jpg,./images/dew-2.jpg |
Beachten Sie, dass GROUP_CONCAT mit Vorsicht verwendet werden sollte, da es zu Problemen mit der Datenbankleistung führen oder übermäßig große Zeichenfolgen zurückgeben kann, wenn die verketteten Werte Kommas enthalten.
Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Zeilen beim Verknüpfen mehrerer Tabellen in SQL-SELECT-Anweisungen vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!