2017-03-20 141 views
0

我有一個查詢在我添加存在條件之前工作。在添加存在的條件後,它將永遠進入循環,並且不會返回任何結果。我認爲主要原因是對每一行的記錄進行全面掃描。任何人都可以請告訴如何避免這種情況。下面的查詢是我試圖實現的一個例子。避免完整掃描子查詢

基本上,條件是一輛汽車可以有很多零件,如果任何一個零件更新了該車的變化,我們想要拿起所有零件。該部分有詳細信息表,我想查看詳細信息表的更新。

select c.id, p.id 
from car c join part p on p.car_id=c.id 
where exists ( 
    select 1 
    from part p join pdetl pd on p.id=pd.part_id 
    where p.car_id=c.id and pd.updated_on > ? 
) 
+1

我認爲無限循環的主要原因是在主查詢中PART是P,在子查詢PART中也是P ...重命名子查詢和標準以及P.car_id = P2.car_Id – maSTAShuFu

回答

0

編輯:修改查詢以獲取與部件相關的所有部件更新。

內部查詢獲取已更新的零件。外部查詢然後拉出所有與車相關的部分:

select c.id, p.id 
from car c join part p on p.car_id=c.id 
where c.id in 
(
    select c.id 
    from car c join part p on p.car_id=c.id 
    where exists ( 
       select 1 
       from pdetl pd 
       where p.id=pd.part_id 
        and pd.updated_on > ? 
       ) 
) 
select c.id, p.id 
from car c join part p on p.car_id=c.id 
where c.id in 
(
    select c.id 
    from car c join part p on p.car_id=c.id 
    where exists ( 
       select 1 
       from pdetl pd 
       where p.id=pd.part_id 
        and pd.updated_on > ? 
       ) 
) 
+0

,但這隻會查看更新的部分。如果任何零件已經爲該車改裝,我想取所有零件。所以我需要加入車牌編號 – shivani

+0

謝謝。我會嘗試。 – shivani

+0

它仍然會執行完整掃描並掛起 – shivani