假设我有一个名为Document的db表,它包含我拥有的所有文档的行。我有另一个名为Shared的db表,它包含指定user_id可以访问的文档(由其他人拥有)的记录。因此,如果我是ex的user1,那么我将把我的文档放在Documents表格中,用户2的文档可以访问存储在Shared table中的user_id和user2的document_ids。
Document
id
user_id
type
name
permissions
Shared
id
document_id
used_id
permissions
Documents表中的每个条目都有权限=" all"。共享表中的每个条目都具有vaying级别的权限,例如{write,read,delete}。在我的查询中,为了获取用户foo拥有/可访问的所有文档,我想取回适当的权限,具体取决于记录是来自Documents还是Shared。我现在有一个基本的查询,它会拉回我的所有文件 拥有并有权访问。我的尝试是这样的:
Select d.id, d.user_id, d.permissions
from Document d
left join Shared s on s.document_id = d.id
where s.user_id = 1
另一次尝试:
Select d.id, d.user_id,
COALESCE(s.permissions, d.permissions) as permissions
from Documents d
left join Shared s on s.document_id = d.id and s.user_id = 1;
答案 0 :(得分:1)
如果我理解正确,我相信你只需要将每个表的结果结合起来:
select * from
(select d.id as document_id, d.user_id, 'all' as permissions, d.name
from t_documents d
union all
select s.document_id, s.user_id, s.permissions, dtl.name
from t_shared s
left join t_documents dtl
on s.document_id = dtl.id) tot
where tot.user_id = 1;