Reputation: 1975
This is folders
table:
+------------+
| id name |
|------------|
| 1 dir1 |
| 2 dir2 |
+------------+
This is files
table:
+------------------------------+
| id folder_id name deleted |
|------------------------------|
| 1 1 file1 true |
| 2 1 file2 false |
| 1 2 file3 true |
| 2 2 file4 true |
+------------------------------+
As you can see, dir1
and dir2
has 2 files per dir. But in dir1
only one file deleted and one file is available. However, dir2
has 2 files but both of them deleted. So no files remains in there.
What I am trying to do is get folders table and dirs that doesn't have any files (all deleted).
So far I tried this but did not worked.
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 */
Expected result:
+------------+
| id name |
|------------|
| 2 dir2 |
+------------+
Because dir2
has files but all deleted.
Upvotes: 1
Views: 58
Reputation: 121534
Use where not exists
:
select *
from folders d
where not exists (
select 1
from files f
where folder_id = d.id
and not deleted)
Upvotes: 2