我正在尝试在文件夹表上准备选择子查询,该子表位于以下列:
workspace_Id
PARENT_ID
我的要求是:
1)我需要特定workspace_id的所有文件夹,例如workspace_id ='xyz'
例如:
select * from folders where workspace_id='xyz'
现在我得到如下结果:
id workspace_id parent_id
1 xyz 51
2 xyz 44
3 xyz 73
4 xyz NULL
5 xyz 90
6 xyz NULL
2)现在假设数据库中没有51和90。
例如:
select * from folders where workspace_id='xyz' and parent_id=51
或
select * from folders where workspace_id='xyz' and parent_id=90
我不应该从上面的2个查询中得到任何结果,因为db中没有51和90。
2)棘手的部分:我的要求是只获取那些具有db_中不存在的parent_id的文件夹或null
我很困惑,如果它可能与自联接或子查询就足够了,我应该学习子查询并加入:(
任何帮助将不胜感激!!!
答案 0 :(得分:1)
使用not exists
几乎可以直接翻译您对所需内容的描述:
select f.*
from folders f
where workspace_id = 'xyz' and
(parent_id is null or
not exists (select 1 from folders f2 where f2.id = f.parent_id)
);