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我不这么认为,请看是的。我的错。谢谢你的例子。当我看的时候,我发现问题在我这边。它只是工作。谢谢