2010-06-30 70 views
1

我有以下表結構 表「位置」具有 - ID - parentLocation_id(關係到自身) - 姓名如何使用嵌套查詢

讓我們假設有以下數據:

id parentLocation_id name 

1   null   Egypt 
2   1    Cairo 
3   2    Zamalek 

這裏我們有三個級別的位置,我想獲得id = 1或location_id的子級的所有級別(位置)。

如果我選擇埃及位置(獲得所有繼承級別),結果必須具有所有三個位置。

我嘗試以下

select l.id from Location as l where l.id = 1 or l.id in (select id from Location where parentLocation_id= l.id); 

這裏的結果是不正確的,在這裏我伸手僅第二級。

我該怎麼做?

提前致謝

+0

你只能有3個關卡,還是有半點機會可以擁有4個或更多?像大陸(非洲)?或suberb(市中心)? – 2010-06-30 13:56:42

+0

我只有三個級別,我不需要更多。 – Neveen 2010-06-30 15:51:20

回答

0

下面是可能適合您想要的結果更好的另一個答案。請注意,有三(3)個地方需要放置所需的身份證號碼

SELECT l1.id AS select_id 
FROM location l1 
WHERE l1.id IN (
    SELECT l2.id 
    FROM location l2, location l3 
    WHERE l2.id = 1 OR l2.parentLocation_id = 1 OR (l2.parentLocation_id = l3.id AND l3.parentLocation_id = 1) 
) 
0

如果您始終有三個級別,則此查詢有效。

SELECT * 
FROM location l1, location l2, location l3 
WHERE l1.id = 1 
    AND l1.id = l2.parentLocation_id 
    AND l2.id = l3.parentLocation_id 

你需要它只拉出2個級別?例如, 埃及,開羅如果沒有第三級(扎馬里克)?

+0

但我需要這個選擇是一個子選擇,所以我不能選擇*我想選擇ID爲 選擇ID從位置在哪裏id(選擇* 從位置l1,位置l2,位置l3 WHERE l1.id = 1 AND l1.id = l2.parentLocation_id AND l2.id = l3.parentLocation_id) 我該怎麼做? 提前致謝 – Neveen 2010-06-30 16:41:25