1

我对特定的 mysql 查询和特定的构造有一些问题。
有2张桌子:

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

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

首先将用户映射到组

table usertogroups (idmaster, idslave)  

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

第二个将组映射到用户

table groupstouser (idmaster, idslave)  

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

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

现在我想在一个查询中获取所有具有依赖用户的组,其中包含表、groupstouser 和 usertogroups 的关系。
我已经尝试了很多语句,但是如果我把第二张桌子放在里面就行不通了。

任何有用的想法?

4

3 回答 3

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

于 2013-08-14T07:21:51.773 回答
0

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

当 auser被分配给group单个表时,它只能用于它。您必须在usertogroups和中保存重复记录groupstouser

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

SELECT * FROM usertogroups order by idslave

如果我错了,您没有在两个表中保存重复数据,请指定拥有两个表的原因

于 2013-08-14T07:20:54.413 回答
0

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

(SELECT * FROM usertogroups  WHERE idmaster=10)
UNION
(SELECT * FROM groupstouser  WHERE idslave=10)
于 2013-08-14T07:10:50.297 回答