左結合の最初の行のみを取得する方法についてのスレッドをたくさん読みましたが、何らかの理由で、これが機能しません。
これが私の構造です(もちろん簡略化されています)
フィード
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
)