Postgres:检测孤立的行

时间:2013-05-16 13:03:23

标签: sql postgresql

考虑以下关系

Userfile: [id, account_id, file_id, ...]
                              |
                              v
                       File: [id, key, ...]

文件仅在服务器上存储一次以节省空间,如果用户创建File(可能已存在),则Userfile引用该文件。

现在,我想阻止File被隔离,当引用它的每个Userfile行都被删除时。

在Postgres中检测此类孤立行的最有效方法是什么?

2 个答案:

答案 0 :(得分:2)

select f.*
from
    file f
    left join
    userfile u on f.id = u.file_id
where u.file_id is null

select f.*
from file f
where not exists (
    select 1
    from userfile u
    where u.file_id = f.id
)

两者都会检测到孤儿,但第二种可以更快。

答案 1 :(得分:0)

试试这个

SELECT
  f.id
FROM File f
LEFT JOIN Userfile u
  ON u.file_id = f.id
WHERE 
  u.file_id IS NULL