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=""
4

1 回答 1

0

当您LEFT JOIN对自己执行表时,使用别名 pp 作为父信息,父行中的字段可用作pp.page_id和,如果父不存在 ,则pp.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

为了在NULL父项不存在时获取 0 和 '' 而不是 s,您可以CASESELECT子句中使用语句:

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
于 2013-03-21T08:16:53.113 回答