有4个表格。在多个表格连接中面临问题
- 项目(ITEM_ID,ITEM_NAME,item_owner)
- 组(grp_id,_名称,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语句。
还有什么其他的方式,我可以重新设计我的表结构,以便我可以用其他方式实现查询?
Thanx提前。
没有'INNEROUTER'加盟。 – 2013-05-02 13:56:42
对不起,是一个错字代替左外连接 – 2013-05-02 14:02:15