Home > Database > Mysql Tutorial > body text

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

Mary-Kate Olsen
Release: 2024-11-05 14:27:02
Original
267 people have browsed it

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

Getting the First Row of a LEFT JOIN

In SQL, performing a LEFT JOIN typically results in multiple rows for the left table, one for each corresponding row in the right table. However, in certain scenarios, it may be necessary to retrieve only the first row for the left table.

Simplified Database Structure

Consider the following simplified database structure:

  • Feeds

    id |  title | content
    ----------------------
    1  | Feed 1 | ...
    Copy after login
  • Artists

    artist_id | artist_name
    -----------------------
    1         | Artist 1
    2         | Artist 2
    Copy after login
  • feeds_artists

    rel_id | artist_id | feed_id
    ----------------------------
    1      |     1     |    1 
    2      |     2     |    1 
    ...
    Copy after login

Initial Attempt and Its Limitation

To extract articles and include only the first artist for each feed, a LEFT JOIN is typically employed. The following query represents an initial attempt:

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'
Copy after login

This query aims to retrieve only the first row of the feeds_artists table for each feed ID. However, it fails to work effectively.

Solution

To successfully extract only the first artist for each feed, the following query can be utilized:

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
  )
Copy after login

In this revised query, the subquery ensures that the artist value represents the first row in the feeds_artists table for each feed ID. The LIMIT 1 clause plays a crucial role in selecting only the first row.

Alternative Solution for Incrementing IDs

If the assumption can be made that artist IDs increment over time, an alternative solution is presented:

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
  )
Copy after login

Here, the MIN(artist_id) subquery returns the artist ID with the lowest value, assuming that this corresponds to the earliest artist.

The above is the detailed content of How to retrieve only the first row from a LEFT JOIN for each left table entry?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!