0

このための正しいタイトルを思い付くのは少し難しかったです。

そのため、1対多の関連付けのために、ユーザープロファイルテーブル、音楽ジャンルテーブル、およびgenre_profilesテーブルがあります。以下に、プロファイルのすべてのgenreNameを返すgroup_concatがありますが、問題があります。genreID 15のような特定のジャンルをフィルタリングしている場合でも、プロファイルのすべてのジャンルを返したいです。

SELECT *, group_concat(cast(g.genreName as char) SEPARATOR ', ') as genreName 
FROM profiles p 
LEFT OUTER JOIN genre_profiles gpro ON gpro.profileID = p.profileID 
LEFT OUTER JOIN genres g ON g.genreID = gpro.genreID
WHERE gpro.genreID = '15' 
GROUP BY p.profileID

プロファイルに関連付けられたgenreNamesをそのままにして、genreIDのクエリをフィルタリングするにはどうすればよいですか?profileIDが15のすべてのプロファイルに対してサブクエリを実行し、そこからすべてのジャンルデータを取得する必要がありますか?

ありがとう!

4

2 に答える 2

0

だから、これで私の問題は解決すると思います。

SELECT * , GROUP_CONCAT( CAST( g.genreName AS CHAR ) SEPARATOR  ', ' ) AS genreName
FROM profiles p
LEFT OUTER JOIN genre_profiles gpro ON gpro.profileID = p.profileID
LEFT OUTER JOIN genres g ON g.genreID = gpro.genreID
WHERE gpro.isInfluence =  '0'
AND p.profileID IN 
(SELECT gp.profileID
FROM genre_profiles gp
WHERE genreID = 10)
GROUP BY p.profileID

それは私のすべてのテストケースで機能します。

于 2012-09-21T22:44:06.607 に答える
0

AND gpro.genreID = '15'をからJOINに移動したいと思うと思いますWHERE(ただし、私の読み方が正しいかどうかは 100% 確信が持てません)。

于 2012-09-21T22:37:17.930 に答える