有4张桌子。
- 项目(item_id、item_name、item_owner)
- 组(grp_id、grp_name、grp_owner)
- 用户(grp_id,usr_ref)
- 分享(item_id,grp_id)
我的目标是获取 item_owner = user_id (比如 123 )或 user_id 属于与该项目共享的组的所有项目的列表。
检索与特定 user_id 所属的组共享的所有项目的基本查询实现将是
select i.item_id from items i
left outer join share on share.item_id = i.item_id
left outer join users on users.grp_id = share.grp_id
left outer join groups on groups.grp_id = share.grp_id
where users.usr_ref = user_id
并包括 user_id 是所有者的所有其他元素,我做了类似的事情
select * from items where owner = user_id or item_id in (
select i.item_id from items i
left outer join share on share.item_id = i.item_id
left outer join users on users.grp_id = share.grp_id
left outer join groups on groups.grp_id = share.grp_id
where users.usr_ref = user_id )
我认为这是一个非常糟糕的实现,因为每次都需要在从连接获得的数组中搜索 item_id。如何改进我的 sql 语句。
还有其他方法可以重新设计我的表结构,以便我可以以其他方式实现查询吗?
提前谢谢。