[英]M:N relation an query
我在使用特定的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的关系来获取依赖用户的所有组。
我已经尝试了很多语句,但是如果我使用其中的第二张表是行不通的。
有任何有用的想法吗?
将此用作内联视图可从两个关联表中获取数据:
((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 。
我不确定,它是否可以解决您的问题:
(SELECT * FROM usertogroups WHERE idmaster=10)
UNION
(SELECT * FROM groupstouser WHERE idslave=10)
我认为您的数据库设计是错误的。
将user
分配给group
只能将单个表用于该组。 您必须将重复记录保存在usertogroups
和groupstouser
。
尝试仅从单个表获取数据。
SELECT * FROM usertogroups order by idslave
如果我错了,您没有在两个表中都保存重复数据,请指定具有两个表的原因
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.