我想表明约翰有多少爱好。你能告诉我如何编写SQL语句吗?
PERSON表
ID | NAME
1 | John
HOBBY表
ID | NAME
1 | music
2 | sport
PERSON_HOBBY_COMBINATION表
ID | PERSON_ID | HOBBY_ID
1 | 1 | 1
预期结果
HOBBY_NAME | HOBBY_EXIST
music | YES
sport | NO
答案 0 :(得分:3)
这可能对您有用:
SELECT h.name, CASE WHEN ph.id IS NULL THEN 'No' ELSE 'Yes' END AS hobby_exist FROM hobby h CROSS JOIN person p LEFT JOIN person_hobby_conbination ph ON (ph.p_id = p.id AND ph.h_id = h.id) WHERE (p.name = 'John')
答案 1 :(得分:1)
Select NAME, count(*) AS NoHobbies from Person p
inner join PERSON_HOBBY_COMBINATION phc
on p.ID = phc.PERSON_ID
group by p.ID, p.NAME
请注意,您应该对该人的ID和NAME进行分组 你需要在NAME上进行分组,因为你在输出中有它,但是如果你有重复的名字,NAME上的分组会将几个人的爱好相加,这就是你需要对ID进行分组的原因。
修改强>
在检查您的预期结果时,您不希望约翰有多少爱好,但有哪些爱好。然后你需要写
Select p.NAME as PersonName, h.Name as HobbyName, case when phc.ID is null then 'No' else 'Yes' end as HasHobby from Person p
inner join Hobby h
on 1 = 1
left outer join dbo.PersonHobbyCombination phc
on p.ID = phc.PersonID and h.ID = phc.HobbyID
答案 2 :(得分:0)
如果您已经拥有John的ID并且只想要一个原始计数,那么这应该可行。
select count(*) from person_hobby_combination where person_id=?