>데이터 베이스 >MySQL 튜토리얼 >각 왼쪽 테이블 항목에 대해 LEFT JOIN에서 첫 번째 행만 검색하는 방법은 무엇입니까?

각 왼쪽 테이블 항목에 대해 LEFT JOIN에서 첫 번째 행만 검색하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-05 14:27:02334검색

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

LEFT JOIN의 첫 번째 행 가져오기

SQL에서 LEFT JOIN을 수행하면 일반적으로 왼쪽 테이블에 여러 행이 생성됩니다. 오른쪽 테이블의 각 해당 행에 대해. 그러나 특정 시나리오에서는 왼쪽 테이블의 첫 번째 행만 검색해야 할 수도 있습니다.

단순화된 데이터베이스 구조

다음과 같은 단순화된 데이터베이스를 고려하세요. 구조:

  • 피드

    id |  title | content
    ----------------------
    1  | Feed 1 | ...
  • 아티스트

    artist_id | artist_name
    -----------------------
    1         | Artist 1
    2         | Artist 2
  • feeds_artists

    rel_id | artist_id | feed_id
    ----------------------------
    1      |     1     |    1 
    2      |     2     |    1 
    ...

이니셜 시도와 한계

기사를 추출하고 각 피드에 첫 번째 아티스트만 포함하려면 일반적으로 LEFT JOIN이 사용됩니다. 다음 쿼리는 초기 시도를 나타냅니다.

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'

이 쿼리는 각 피드 ID에 대해 Feeds_artists 테이블의 첫 번째 행만 검색하는 것을 목표로 합니다. 그러나 효과적으로 작동하지 않습니다.

해결책

각 피드의 첫 번째 아티스트만 성공적으로 추출하려면 다음 쿼리를 활용할 수 있습니다.

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
  )

이 수정된 쿼리에서 하위 쿼리는 아티스트 값이 각 피드 ID에 대한 Feeds_artists 테이블의 첫 번째 행을 나타내는지 확인합니다. LIMIT 1 절은 첫 번째 행만 선택하는 데 중요한 역할을 합니다.

ID 증가를 위한 대체 솔루션

시간이 지남에 따라 아티스트 ID가 증가한다고 가정할 수 있는 경우 , 대체 솔루션이 제시됩니다:

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
  )

여기서는 MIN(artist_id) 하위 쿼리는 가장 초기 아티스트에 해당한다고 가정하고 가장 낮은 값을 가진 아티스트 ID를 반환합니다.

위 내용은 각 왼쪽 테이블 항목에 대해 LEFT JOIN에서 첫 번째 행만 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.