[英]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.