1. ホーム
  2. mysql

[解決済み] LEFT JOIN 最初の行のみ

2022-04-23 07:47:52

質問

左結合の最初の行だけを取得するというスレッドをたくさん読みましたが、なぜか私にはうまくいきません。

以下は私の構造です(もちろん簡略化しています)。

フィード

id |  title | content
----------------------
1  | Feed 1 | ...

アーティスト

artist_id | artist_name
-----------------------
1         | Artist 1
2         | Artist 2

フィード_アーティスト

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

さて、記事を取得して、最初のArtistだけに参加したいのですが、次のようなものを考えてみました。

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'