2016-09-02 3 views
0

Я пытаюсь подготовить выберите подзапрос на столе папки, которая имеет под столбцами:SQLite: выберите подзапрос

workspace_Id
PARENT_ID

мое требование:

1) Мне нужно все папки конкретный workspace_id говорят workspace_id = 'хуг'
, например:
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 запросов, так как 51 и 90 не присутствует в БД.

2) сложная часть: мое требование принести только те папки, которые уже PARENT_ID, который не присутствует в БД или нулевой

Я смущен, если его можно с самостоятельно присоединиться или подзапрос будет достаточно, я должен действительно узнать подзапросов и присоединиться :(

Любая помощь будет оценена !!!

+0

Сначала вы говорите, что значения 51 и 90 находятся в таблице. Тогда вы говорите, что это не так. – jarlh

+0

@jarlh, что я пытаюсь сказать, есть дочерние папки и родительские папки, но я хочу получить те папки, родительские папки которых не существуют в db, например (51 и 90) являются родительскими папками, но они действительно не " t существует в db, папке 1 и папке 5 есть несуществующие родители или вы можете сказать, что они просто фиктивные указатели. – Soumyaansh

ответ

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) 
    ); 
+0

спасибо за ответ, не могли бы вы рассказать мне, почему вы использовали 1 в подзапросе? – Soumyaansh

+1

'EXISTS' проверяет, только если подзапрос возвращает любую строку, поэтому не имеет значения, какое значение в этой строке оно. –

+0

@Soumyaansh. , , Я всегда использую 'select 1' для' exist' и 'not exist'. Важно только, существует ли строка, а не возвращаемое значение. –