我如何根据另一个 tables 有条件的数据过滤 table?

How can I filter table based on another tables data having condition?

这是folders table:

+------------+
| id  name   |
|------------|
|  1  dir1   |
|  2  dir2   |
+------------+

这是files table:

+------------------------------+
| id  folder_id  name  deleted |
|------------------------------|
|  1  1          file1 true    |
|  2  1          file2 false   |
|  1  2          file3 true    |
|  2  2          file4 true    |
+------------------------------+

如您所见,dir1dir2 每个目录有 2 个文件。但是在dir1中只有一个文件被删除,一个文件可用。但是,dir2 有 2 个文件,但都被删除了。所以那里没有文件。

我想要做的是获取文件夹 table 和没有任何文件(全部删除)的目录。

到目前为止我试过了但是没有成功。

SELECT
    "dirs".* 
FROM
    "dirs"
    INNER JOIN "files" ON ( "files"."folder_id" = "folders"."id" ) 
WHERE
    ( "files"."deleted" IS FALSE ) 
GROUP BY
    "folders".ID 
HAVING
    COUNT ( files.ID ) != 0 /* or > 0 or == 0 */

预期结果:

+------------+
| id  name   |
|------------|
|  2  dir2   |
+------------+

因为dir2有文件但是全部删除了

使用where not exists:

select *
from folders d
where not exists (
    select 1
    from files f
    where folder_id = d.id
    and not deleted)

Working example in rextester.