본문 바로가기
MySql

MySQL LEFT JOIN only first row

by 베이스 공부 2021. 1. 8.
반응형

왼쪽 조인의 첫 번째 행만 얻는 것에 대한 많은 스레드를 읽었지만 어떤 이유로 든 이것이 작동하지 않습니다.

내 구조는 다음과 같습니다 (물론 단순화)

피드

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 
...

이제 나는 기사를 얻고 첫 번째 아티스트에만 합류하고 싶습니다.

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'

feeds_artists의 첫 번째 행만 가져 오지만 이미 작동하지 않습니다.

데이터베이스로 인해 TOP 를 사용할 수 없으며 날짜별로 정렬해야하므로 feeds_artists.artist_id 별로 결과를 그룹화 할 수 없습니다 (그룹화하여 결과를 얻었습니다). 이런 식으로, 그러나 최신이 아닌 결과)

OUTER APPLY로도 시도했습니다. 성공하지 못했습니다. 솔직히 말해서 그 행에서 무슨 일이 일어나는지 상상할 수 없습니다. 아마도 이것이 작동하지 않는 가장 큰 이유 일 것입니다.

해결책:

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
)
WHERE f.id = '13815'

 

해결 방법

 

@Matt Dodges 대답은 나를 올바른 길로 안내합니다. 그동안 많은 사람들에게 도움이 된 모든 답변에 다시 한 번 감사드립니다. 다음과 같이 작동합니다.

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
)
WHERE f.id = '13815'

 

참조 페이지 https://stackoverflow.com/questions/15626493

 

 

반응형

댓글