繁体   English   中英

M:N关系查询

[英]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只能将单个表用于该组。 您必须将重复记录保存在usertogroupsgroupstouser

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

SELECT * FROM usertogroups order by idslave

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM