0

为此想出正确的标题有点挑战性。

所以我有一个用户资料表、一个音乐流派表和一个用于一对多关联的genre_profiles 表。下面我有一个 group_concat 返回配置文件的所有genreName,但是有一个问题。即使我正在过滤特定类型(如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

如何过滤我的genreID查询,使与个人资料相关联的genreNames完好无损?我应该对 profileID 为 15 的所有配置文件进行子查询,然后从中获取所有流派数据吗?

谢谢!

4

2 回答 2

0

我认为您会希望将 theAND gpro.genreID = '15'从 theJOIN移到 the WHERE(尽管我不能 100% 确定我没看错)。

于 2012-09-21T22:37:17.930 回答
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 回答