私は現在、クエリの一部としてこの左結合を持っています:
LEFT JOIN movies t3 ON t1.movie_id = t3.movie_id AND t3.popularity = 0
問題は、同じ名前で同じ人気の映画が複数ある場合(尋ねないでください、それはその通りです:-))、重複した結果が返されることです。
とはいえ、左結合の結果を1つに制限したいと思います。
私はこれを試しました:
LEFT JOIN
(SELECT t3.movie_name FROM movies t3 WHERE t3.popularity = 0 LIMIT 1)
ON t1.movie_id = t3.movie_id AND t3.popularity = 0
2番目のクエリはエラーで終了します:
Every derived table must have its own alias
私は完全なクエリを提供していないので、私が求めていることは少し曖昧であることを知っていますが、私が求めていることは一般的に可能ですか?
エラーは明らかです。_)
_を閉じた後にサブクエリのエイリアスを作成し、それをON
句で使用する必要があります。これは、派生または実数のすべてのテーブルに独自の識別子が必要なためです。次に、サブクエリの選択リストに_movie_id
_を含めて、サブクエリに参加できるようにする必要があります。サブクエリにはすでに_WHERE popularity = 0
_が含まれているため、結合のON
句に含める必要はありません。
_LEFT JOIN (
SELECT
movie_id,
movie_name
FROM movies
WHERE popularity = 0
ORDER BY movie_name
LIMIT 1
) the_alias ON t1.movie_id = the_alias.movie_id
_
外側のSELECT
でこれらの列のいずれかを使用している場合は、たとえば_the_alias.movie_name
_を介してそれを参照します。
参加するグループごとに1つを取得するには、_movie_id
_で集計MAX()
またはMIN()
を使用し、それをサブクエリにグループ化します。その場合、サブクエリLIMIT
は必要ありません。名前ごとに最初の_movie_id
_をMIN()
で、最後をMAX()
で受け取ります。
_LEFT JOIN (
SELECT
movie_name,
MIN(movie_id) AS movie_id
FROM movies
WHERE popularity = 0
GROUP BY movie_name
) the_alias ON t1.movie_id = the_alias.movie_id
_
最初のクエリにGROUP BY t3.movie_id
を追加してみてください
これを試して:
LEFT JOIN
(
SELECT t3.movie_name, t3.popularity
FROM movies t3 WHERE t3.popularity = 0 LIMIT 1
) XX
ON t1.movie_id = XX.movie_id AND XX.popularity = 0
LEFT JOIN movies as m ON m.id = (
SELECT id FROM movies mm WHERE mm.movie_id = t1.movie_id
ORDER BY mm.id DESC
LIMIT 1
)