2015-02-27 1 views
2

Я имеюЛучшего способ найти родительскую строку в файле удаляемый или не

ParentTable

PId - int  
PDescription - varchar 

ChildTable

CId - Int  
CDetails - Varchar  
PId - Int -- Mapped from Parent 

Мне нужно найти, является ли файл удаляемой родительской строки или нет при загрузке самих данных, потому что я не хочу разрешать пользователю удалять данные с помощью сопоставления. И мой запрос ниже

select P.PId,Pdescription,Cast(Count(C.CId) as Bit)^1 "IsDeletable" 
From ParentTable P 
LEFT JOIN ChildTable C On P.Pid=C.Pid 
Group By P.PId,Pdescription 

Здесь проблема: у ребенка много строк, и для выполнения запроса потребовалось много времени. Есть ли другой лучший способ сделать это.

ответ

2

Сначала вы должны убедиться, что у вас есть индекс на ChildTable.Pid, а затем вы можете переписать свой запрос на что-то вроде этого.

select P.Pid, 
     P.Pdescription, 
     case when exists (
         select * 
         from dbo.ChildTable as C 
         where P.Pid = C.Pid 
         ) 
     then cast(0 as bit) 
     else cast(1 as bit) 
     end as IsDeleteable 
from dbo.ParentTable as P; 

Этот запрос проверяет наличие строк в ChildTable, где ваш запрос подсчет количества строк для каждого родителя. Проверка на существование просто должна найти только одну строку и будет использовать индекс для поиска по каждой строке в ParentTable.

enter image description here

Смежные вопросы