优化查询以从两个表

时间:2016-10-01 05:23:41

标签: postgresql

假设我有一个名为Document的db表,它包含我拥有的所有文档的行。我有另一个名为Shared的数据库表,它包含我可以读/写的所有文档(由其他人拥有)的记录。

Document
id
type
user_id
permissions

Shared
id
document_id
used_id
permissions

我正在尝试编写一个查询,它可以让我找回我(给定user_id)拥有并有权访问的所有文档。我的尝试是这样的:

Select id, type, user_id, permissions from Document where user_id = 123
union all
Select id, type, user_id, permissions from Document where id in
                                   (select document_id from shared where user_id = 123)

以上看起来有点冗长所以我想知道是否有一种更简洁/有效的方式来编写上述内容(如果它可以正常工作)

1 个答案:

答案 0 :(得分:2)

尝试使用left join + where子句

Select d.id, d.type, d.user_id, d.permissions from Document d
left join shared s on s.document_id = d.id
                    and s.user_id = d.user_id
where d.user_id = 123
and s.document_id IS NOT NULL