Postgres Join允许空表

时间:2015-02-27 06:40:28

标签: postgresql join greatest-n-per-group

我有以下架构,我在加入这些表时遇到了很多麻烦。我试图让所有没有文件的文件夹在过去10分钟内更新。但我想要包含任何没有任何文件的文件夹。

create table folders (
  id              int,
  table_name      text
);

create table files (
  id              int,
  folder_id       int,
  file_name       text,
  last_updated    timestamp with time zone
);

到目前为止我的天真尝试类似于以下内容(这是从CLI重新创建):

Select t.folder_name from folders t
join files f on (f.folder_id = t.id)
where last_updated < 15m
group by t.id

我可以显示所有文件夹或每个文件夹的最新文件,但不能同时显示两者。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

像&#34; a没有一些b&#34;通常使用not exists条件进行翻译:

select fld.*
from folders fld
where not exists (select 1 
                  from files fl
                  where fl.last_updated >= current_timestamp - interval '10' minute
                    and fl.folder_id = fld.id);

该子选择也将返回&#34;没有&#34;对于没有任何文件的文件夹,not exists也适用于他们。