2013-03-21 42 views
0

我想從表中選擇所有行,並且還包括有關其父母在同一行中的一些信息如果他們有父母否則父母數據應該爲空。使用相同的表選擇一個可選的父行

SELECT 
p.id, 
p.name, 
'0' AS page_exists  
FROM 
pages p 
    LEFT JOIN pages pp ON (pp.page_id=p.parent) 
WHERE 
p.page_type=3 
ORDER BY 
name ASC 

我想在父以下兩列添加到每行一個成功的匹配: 「PARENT_ID」和「PARENT_NAME」

與父頁的最終結果將看起來是這樣:

id=2 
name="test" 
page_exists=0 
parent_id=1 
parent_name="abc" 

如果頁面沒有父母就應該是這樣的:

id=3 
name="other page" 
page_exists=0 
parent_id=0 
parent_name="" 

回答

0

當你做表的LEFT JOIN本身,使用別名頁父的信息,從父行的字段可作爲pp.page_idpp.name,均爲NULL,如果父母不存在。

因此,下面的查詢將包括來自父字段:

SELECT p.id, p.name, '0' AS page_exists, 
     pp.page_id AS parent_id, pp,name AS parent_name  
FROM pages p 
LEFT JOIN pages pp 
ON (pp.page_id=p.parent) 
WHERE p.page_type=3 
ORDER BY name ASC 

爲了當父不存在得到0「的」,而不是NULL S,可以使用在CASE聲明SELECT從句:

SELECT pp.id, pp.name, '0' AS page_exists, 
     CASE WHEN pp.page_id THEN pp.page_ID ELSE 0 END AS parent_id, 
     CASE WHEN pp.name THEN pp.name ELSE '' AS parent_name 
相關問題