Erste Zeile eines LEFT JOIN abrufen
In SQL führt die Ausführung eines LEFT JOIN normalerweise zu mehreren Zeilen für die linke Tabelle, einer für jede entsprechende Zeile in der rechten Tabelle. In bestimmten Szenarien kann es jedoch erforderlich sein, nur die erste Zeile für die linke Tabelle abzurufen.
Vereinfachte Datenbankstruktur
Betrachten Sie die folgende vereinfachte Datenbank Struktur:
Feeds
id | title | content ---------------------- 1 | Feed 1 | ...
Künstler
artist_id | artist_name ----------------------- 1 | Artist 1 2 | Artist 2
feeds_artists
rel_id | artist_id | feed_id ---------------------------- 1 | 1 | 1 2 | 2 | 1 ...
Initial Versuch und seine Grenzen
Um Artikel zu extrahieren und nur den ersten Künstler für jeden Feed einzubeziehen, wird normalerweise ein LEFT JOIN verwendet. Die folgende Abfrage stellt einen ersten Versuch dar:
SELECT * FROM feeds LEFT JOIN feeds_artists ON wp_feeds.id = ( SELECT feeds_artists.feed_id FROM feeds_artists WHERE feeds_artists.feed_id = feeds.id LIMIT 1 ) WHERE feeds.id = '13815'
Diese Abfrage zielt darauf ab, nur die erste Zeile der Tabelle „feeds_artists“ für jede Feed-ID abzurufen. Es funktioniert jedoch nicht effektiv.
Lösung
Um nur den ersten Künstler für jeden Feed erfolgreich zu extrahieren, kann die folgende Abfrage verwendet werden:
SELECT * FROM feeds f LEFT JOIN artists a ON a.artist_id = ( SELECT artist_id FROM feeds_artists fa WHERE fa.feed_id = f.id LIMIT 1 )
In dieser überarbeiteten Abfrage stellt die Unterabfrage sicher, dass der Künstlerwert die erste Zeile in der Tabelle „feeds_artists“ für jede Feed-ID darstellt. Die LIMIT 1-Klausel spielt eine entscheidende Rolle bei der Auswahl nur der ersten Zeile.
Alternative Lösung zum Erhöhen von IDs
Wenn davon ausgegangen werden kann, dass sich Künstler-IDs im Laufe der Zeit erhöhen , wird eine alternative Lösung vorgestellt:
SELECT * FROM feeds f LEFT JOIN artists a ON a.artist_id = ( SELECT MIN(fa.artist_id) a_id FROM feeds_artists fa WHERE fa.feed_id = f.feed_id )
Hier gibt die Unterabfrage MIN(artist_id) die Künstler-ID mit zurück niedrigster Wert, vorausgesetzt, dass dieser dem frühesten Künstler entspricht.
Das obige ist der detaillierte Inhalt vonWie kann ich für jeden linken Tabelleneintrag nur die erste Zeile aus einem LEFT JOIN abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!