如何在多对多关系中使用SQL
我想展示约翰有多少爱好。您能告诉我如何编写SQL语句吗 人员表 爱好表 个人爱好组合表 预期结果如何在多对多关系中使用SQL,sql,many-to-many,Sql,Many To Many,我想展示约翰有多少爱好。您能告诉我如何编写SQL语句吗 人员表 爱好表 个人爱好组合表 预期结果 HOBBY_NAME | HOBBY_EXIST music | YES sport | NO 请注意,您应该根据人员的ID和姓名进行分组。 您需要按姓名分组,因为您在输出中有姓名,但是如果您有重复的姓名,则按姓名分组会将几个人的爱好加在一起,这就是您也需要按ID分组的原因 编辑 当你检查你的预期结果时,你不想知道约翰有多少爱好,而是想知道他有哪些爱好。那你就要写了 Select p.NAME a
HOBBY_NAME | HOBBY_EXIST
music | YES
sport | NO
请注意,您应该根据人员的ID和姓名进行分组。
您需要按姓名分组,因为您在输出中有姓名,但是如果您有重复的姓名,则按姓名分组会将几个人的爱好加在一起,这就是您也需要按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
请注意,您应该根据人员的ID和姓名进行分组。
您需要按姓名分组,因为您在输出中有姓名,但是如果您有重复的姓名,则按姓名分组会将几个人的爱好加在一起,这就是您也需要按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
这可能适合您: 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')
这可能适合您: 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')
如果你已经有约翰的身份证,只需要一个原始计数,那么这应该是可行的
select count(*) from person_hobby_combination where person_id=?
如果你已经有约翰的身份证,只需要一个原始计数,那么这应该是可行的
select count(*) from person_hobby_combination where person_id=?
个人姓名表是否唯一?看起来好像没有,所以可能有很多人的名字是John。名字在Person表中是uniques吗?看起来不是,所以可能有很多人叫约翰。我从来没有想过团体和重复的名字。谢谢你的建议。我从来没有想过团体和重复的名字。谢谢你的建议。
select count(*) from person_hobby_combination where person_id=?