的倍数,我有两个MySQL表如下:MySQL的内部连接返回同一行
resource
-----------------------------------------------
id name group owner_id
-----------------------------------------------
1 MyResource1 hs 11
2 MyResource2 ms 24
3 MyResource3 ps 11
...
resource_access
-----------------------------------------------
id resource_id user_id
-----------------------------------------------
1 1 12
2 2 24
3 2 11
4 3 15
...
现在,第一台是资源列表,当然,和在owner_id
列其各自所有者。第二个表格是与另一个用户“共享”该资源的结果。表resource_access
可能包含user_id
的记录,该记录相当于resource_access
的一行中的owner_id
,这是由所有者交换所造成的混乱清理造成的。
我只想获取用户有权访问的任何资源的ID,名称和组,无论它们是所有者还是与它们共享。这里是我的MySQL查询为例用户(24):
SELECT resource.id, resource.name, resource.group
FROM `resource`
INNER JOIN resource_access ON (
resource.owner_id='24'
OR (
resource_access.user_id='24' AND
resource_access.resource_id=resource.id
)
)
眼下,它返回id
,name
,并group
资源2号多次(如十二)个。这有没有可能的原因?我试过LEFT
和RIGHT
连接,我得到了相同的结果。 resource
表中有许多记录,但没有任何记录,其中id
为2.在resource_access
中没有重复的行与同一个用户共享两次资源。
在此先感谢。
使用'SELECT DISTINCT'删除重复项。否则,你会为每个与他们共享的用户获得一行,因为'JOIN'在两个表之间执行交叉产品。 – Barmar