我正在尝试从表格中选择所有行,并在同一行中包含有关其父级的一些信息如果他们有父级,否则父级数据应为空白。
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 :(得分: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
为了在父项不存在时获得0和''而不是NULL
,您可以在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