簡體   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