Mysql 使用相同的表选择可选的父行

Mysql 使用相同的表选择可选的父行,mysql,sql,pdo,Mysql,Sql,Pdo,我试图从表中选择所有行,如果它们有父行,则在同一行中还包含有关父行的一些信息,否则父行数据应为空 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 成功匹配后,我希望父级将以下两列添加到每行: “父项id”和“父项名称” 具有父级的页面的最终结果如

我试图从表中选择所有行,如果它们有父行,则在同一行中还包含有关父行的一些信息,否则父行数据应为空

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
成功匹配后,我希望父级将以下两列添加到每行: “父项id”和“父项名称”

具有父级的页面的最终结果如下所示:

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=""
如果页面没有父级,则应如下所示:

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

当您将表的
左联接到自身时,使用别名pp作为父信息,父行中的字段可用作
pp.page\u 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
为了在父级不存在时获取0和“”,而不是
NULL
s,可以在
SELECT
子句中使用
CASE
语句:

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