我对特定的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的关系。
我已经尝试了很多语句,但是如果我把第二个表放入其中就行不通了。
任何有用的想法?
答案 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>您必须同时保存usertogroups
和groupstouser
中的重复记录。
尝试仅从单个表中获取数据。
SELECT * FROM usertogroups order by idslave
如果我错误的是你没有在两个表中保存重复数据,那么请说明有两个表的原因