这是folders
表:
+------------+
| id name |
|------------|
| 1 dir1 |
| 2 dir2 |
+------------+
这是files
表:
+------------------------------+
| id folder_id name deleted |
|------------------------------|
| 1 1 file1 true |
| 2 1 file2 false |
| 1 2 file3 true |
| 2 2 file4 true |
+------------------------------+
如您所见,dir1
和dir2
每个目录有2个文件。但是在dir1
中,只有一个文件被删除,一个文件可用。但是,dir2
有2个文件,但都删除了。因此,没有文件保留在那里。
我想要做的是获取没有任何文件(都已删除)的文件夹表和目录。
到目前为止,我尝试了此操作,但没有成功。
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
有文件,但已全部删除。
答案 0 :(得分:2)
使用where not exists
:
select *
from folders d
where not exists (
select 1
from files f
where folder_id = d.id
and not deleted)