Heim  >  Artikel  >  Datenbank  >  Wie kann ich für jeden linken Tabelleneintrag nur die erste Zeile aus einem LEFT JOIN abrufen?

Wie kann ich für jeden linken Tabelleneintrag nur die erste Zeile aus einem LEFT JOIN abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-05 14:27:02245Durchsuche

How to retrieve only the first row from a LEFT JOIN for each left table entry?

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!

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