我在MySQL中进行查询时遇到了一个小问题。 我有以下表格:
我正在尝试进行一个查询,该查询为我提供了来自所选组的成员。你能救我吗?
我不熟悉联接表,但对于我所做的搜索,我认为这可能是其中一个解决方案。
提前致谢。
Elkas
答案 0 :(得分:2)
如果您知道群组ID
select member.* from member m
inner join member_has_group mg on m.id = mg.id_member
where mg.id_group = [x]
如果您只知道群组名称
select member.* from member m
inner join member_has_group mg on m.id = mg.id_member
inner join group g on g.id = mg.id_group
where g.name = 'group name'
答案 1 :(得分:0)
这在SQL中是微不足道的:
SELECT m.id_member, m.name
FROM member AS m
INNER JOIN member_has_group AS h ON (m.id_member=h.id_member)
WHERE (h.id_group=@my_id_group)
@my_id_group是您必须提供的群组ID。
答案 2 :(得分:0)
是的,你需要在这里加入。
SELECT *
FROM `member`
JOIN `group` ON member.id = group.id
JOIN `member_has_group` ON group.id = member_has_group.id
根据表中的信息,您可能根本不需要第三个表。您只需要一个连接器表,然后您之间具有“多对多”关系。
(如果你已经知道,请忽略其余的 关于数据库规范化)
例如,如果您有两个表,即作者和书籍。作者将包含名称,出版商,生日等字段,无论“作者”的属性如何。书籍将包含相关的“书籍”信息。这是一种“一对多”的关系。作者可以(通过诸如author_id之类的字段)链接到几本书,但是一本书只能有一个作者。你不需要第三张表。
在此基础上,假设您有第三个“角色名称”表。这将是“书籍”表中任何书籍中使用的主要角色名称列表。其中一个角色恰好被命名为John Steele。约翰有一系列关于他的书。在Books表中,有几本书可能会将John Steele列为角色。在角色表中,John Steele可以列在几本书中。这是“多对多”。你需要第三张桌子。它只有两个字段。一个book_id
和character_id
,John Steele出现的每本书都有一个条目。