2015-02-27 3 views
0

У меня есть следующая схема, и у меня возникли проблемы с присоединением к этим таблицам. Я пытаюсь получить все папки, у которых нет файла, обновленного за последние 10 минут. Но я хочу включать любые папки, у которых нет файлов.Postgres Join, который позволяет использовать пустой стол

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 
); 

Моя наивная попытка до сих пор что-то вроде следующего (это воссоздание из командной строки):

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

Условие, как «а что не имеет какие-Ь» обычно переводится с использованием 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); 

подвыборка будет также возвращать «ничего» для папки, у которых нет файлов, поэтому для них также подходит not exists.

+1

6 секунд раньше и почти идентичны. :) –

Смежные вопросы