M:N关系查询

时间:2013-08-14 07:01:46

标签: mysql sql

我对特定的mysql查询和特定构造有一些问题 有2个表:

table users (id, username)
table groups (id, groupname)

这两个表是m:n关系,但有2个表。

首先将用户映射到群组

table usertogroups (idmaster, idslave)  

其中idmaster与users.id相关,而idslave则与groups.id相关。

第二个将组映射到用户

table groupstouser (idmaster, idslave)  

其中idmaster与groups.id相关,idslave与users.id

相关

取决于应用程序,它无法更改。

现在我希望在一个查询中获得具有依赖用户的所有组,其中包含table,groupstouser和usertogroups的关系。
我已经尝试了很多语句,但是如果我把第二个表放入其中就行不通了。

任何有用的想法?

3 个答案:

答案 0 :(得分:1)

将此作为内联视图用于从两个关联表中获取数据:

((SELECT idmaster AS userid, idslave AS groupid FROM userstogroup)
UNION
(SELECT idslave AS userid, idmaster AS groupid FROM groupstouser)) all_associations

然后你可以像这样查询:

SELECT groups.groupname, users.username
FROM groups
INNER JOIN ((SELECT idmaster AS userid, idslave AS groupid FROM userstogroup)
            UNION
           (SELECT idslave AS userid, idmaster AS groupid FROM groupstouser)) all_associations
ON groups.id =  all_associations.groupid
INNER JOIN users
ON users.id =  all_associations.userid

这是一个SQL Fiddle

答案 1 :(得分:0)

我不确定,它可能会解决您的问题:

(SELECT * FROM usertogroups  WHERE idmaster=10)
UNION
(SELECT * FROM groupstouser  WHERE idslave=10)

答案 2 :(得分:0)

我认为你的数据库设计是错误的。

user分配给group时,只能使用单个表格。{p>您必须同时保存usertogroupsgroupstouser中的重复记录。

尝试仅从单个表中获取数据。

SELECT * FROM usertogroups order by idslave

如果我错误的是你没有在两个表中保存重复数据,那么请说明有两个表的原因