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