在一个场景中,我有多个人,每个人都可以有许多爱好,我如何才能使它,所以我选择的人,其中有一个特定的爱好,但也所有其他爱好。如果我使用where子句,查询只返回指定的hobby而不返回其他的hobby
就像,从所有的人显示我的人,喜欢去钓鱼,也显示我的所有其他爱好。
我没法向你解释,我需要一把小提琴
我怎样才能让我看到迈克的所有其他爱好,但确保其中一个是战斗?
SELECT name, GROUP_CONCAT(HobbyName)
FROM people
INNER JOIN peoples_hobbies ON pId = peopleId
INNER JOIN hobby ON hobbyId = hId
WHERE HobbyName = 'Fighting'
GROUP BY name
/如果我这么做的话,克莱苏做的地方,所以它只选择了那个爱好,我想要得到的,我指定的爱好,还有属于那个人的所有其他爱好/
1条答案
按热度按时间chhkpiq41#
从现有查询开始,只需添加
having
筛选有特定爱好的人的条款:旁注:
在多表查询中,总是用每一列所属的表限定每一列—这使得查询更容易理解,并且避免了两个不同表具有相同名称的列时的歧义
HAVING MAX(h.HobbyName = 'Fighting')
是一条捷径HAVING MAX(CASE WHEN h.HobbyName = 'Fighting' THEN 1 ELSE 0 END) = 1
添加people
表到group by
子句更安全,因为它可以正确处理同音异义词