0

mysql で完全な結合を実行するための構文の何が問題なのか理解できないようです

select movies.title, genres.name    
from movies
full join genres_in_movies
on movies.id = genres_in_movies.movie_id
full join genres
on genres_in_movies.genre_id = genres.id
where movies.id = 12345;

関連するテーブルは次のとおりです。

genres
id (pk)
name 

movies
id (pk)
title

genres_in_movies
genre_id
movie_id

映画とそのジャンルをリストしたテーブルを取得しようとしています。1 つの映画がジャンル テーブルに複数のエントリを持つ場合があるため、完全結合を使用して、最終結果で movies.title 属性を繰り返さなくても、可能な限りすべての結果を取得しています。

それが違いを生む場合、私はmysqlを使用しています。私が受け取るエラーは、5行目あたりの構文のエラーについて不平を言っています。

編集:

さて、現在のサンプル出力:

Name    Genre
Batman  Action
Batman  Crime
Batman  Mystery

この情報を保持するために3行を保持しないテーブルを取得したいのですが、代わりに次のようなものがあります:

Title  Genre
Batman Action, Crime, Mystery

それともそれは不可能ですか?

4

2 に答える 2

2

これを試してください:

SELECT m.title, g.name
FROM movies m
JOIN genre_in_movies gim on gim.movie_id = m.id
JOIN genres g on g.id = gim.movie_id
WHERE m.id = '12345'
于 2012-04-21T01:28:57.510 に答える
1

MySQL は FULL JOIN をサポートしていません。UNION 句を使用して、左外部結合と右外部結合を組み合わせて使用​​する必要があります。

ここで説明を見ることができます。

とにかく、私は FULL JOIN があなたが得ようとしているものをあなたに与えるとは思わない.

映画ごとに複数のレコードを持つことを避けるために、映画ごとにグループ化する必要がありますが、グループ連結を実行して、すべてのジャンルを 1 つのレコードに表示する必要があります。

クエリの期待される出力のサンプルを提供してください。

編集:

select movies.title, GROUP_CONCAT( genres.name SEPARATOR ‘, ’ ) as 'genres'
from movies
inner join genres_in_movies on movies.id = genres_in_movies.movie_id
inner join genres on genres_in_movies.genre_id = genres.id
where movies.id = 12345
group by movies.title;
于 2012-04-21T01:33:13.910 に答える