最初の行のみLEFT JOIN 質問する

最初の行のみLEFT JOIN 質問する

左結合の最初の行のみを取得する方法についてのスレッドをたくさん読みましたが、何らかの理由で、これが機能しません。

これが私の構造です(もちろん簡略化されています)

フィード

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

今、私は記事を入手して最初のアーティストだけに参加したいと思っており、次のようなことを考えました。

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'

ベストアンサー1

アーティスト ID が時間の経過とともに増加すると想定できる場合は、がMIN(artist_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
  )

おすすめ記事