Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何根据具有条件的其他表数据筛选表?_Postgresql_Postgresql 10 - Fatal编程技术网

Postgresql 如何根据具有条件的其他表数据筛选表?

Postgresql 如何根据具有条件的其他表数据筛选表?,postgresql,postgresql-10,Postgresql,Postgresql 10,这是文件夹表: +------------+ | id name | |------------| | 1 dir1 | | 2 dir2 | +------------+ +------------------------------+ | id folder_id name deleted | |------------------------------| | 1 1 file1 true | | 2 1 fi

这是
文件夹
表:

+------------+
| id  name   |
|------------|
|  1  dir1   |
|  2  dir2   |
+------------+
+------------------------------+
| id  folder_id  name  deleted |
|------------------------------|
|  1  1          file1 true    |
|  2  1          file2 false   |
|  1  2          file3 true    |
|  2  2          file4 true    |
+------------------------------+
这是
文件
表格:

+------------+
| id  name   |
|------------|
|  1  dir1   |
|  2  dir2   |
+------------+
+------------------------------+
| id  folder_id  name  deleted |
|------------------------------|
|  1  1          file1 true    |
|  2  1          file2 false   |
|  1  2          file3 true    |
|  2  2          file4 true    |
+------------------------------+
如您所见,
dir1
dir2
每个dir有2个文件。但是在
dir1
中,只有一个文件被删除,一个文件可用。但是,
dir2
有两个文件,但都已删除。所以那里没有文件了

我试图做的是获取没有任何文件(全部删除)的文件夹表和目录

到目前为止,我尝试了这个,但没有成功

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
已删除所有文件。

在不存在的地方使用

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

这会同时返回两个目录:/I我不这么认为,请看是的。我的错。谢谢你的例子。当我看的时候,我发现问题在我这边。它只是工作。谢谢