我如何根据另一个 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 |
+------------------------------+
如您所见,dir1
和 dir2
每个目录有 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)
这是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 |
+------------------------------+
如您所见,dir1
和 dir2
每个目录有 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)