同表两列关联查询:根据Title_Root显示对应Title
解决自关联查询:获取子节点对应的根Title内容
嘿,刚接触SQL的话,这种需求其实是很典型的**自连接(self-join)**场景——我们需要从同一张表中,把有父节点(Title_Root不为null)的行和它们对应的根节点行关联起来,就能拿到你想要的结果啦。
先确认下你的表结构(我把列名统一成下划线风格,方便写SQL):
| Title | Title_Root |
|---|---|
| A | null |
| B | A |
| C | D |
| D | null |
| E | null |
| F | E |
核心查询语句
你可以用下面的SQL来实现需求,我会一步步解释每个部分:
SELECT t1.Title AS Child_Title, -- 显示子节点的Title(比如B、C、F) t2.Title AS Root_Title -- 显示对应的根节点Title(比如A、D、E) FROM your_table_name t1 -- 给表起别名t1,代表子节点行 JOIN your_table_name t2 -- 再次引用同一张表,别名t2代表根节点行 ON t1.Title_Root = t2.Title -- 用子节点的Title_Root关联根节点的Title WHERE t1.Title_Root IS NOT NULL; -- 只筛选Title_Root有值的行
结果说明
执行这个查询后,你会得到这样的结果:
| Child_Title | Root_Title |
|---|---|
| B | A |
| C | D |
| F | E |
完全符合你想要的——只显示Title_Root有值的行,并且展示对应的根Title内容。
小补充
如果你的数据里可能存在Title_Root没有对应Title的情况(比如某行Title_Root是X,但表中没有Title为X的行),可以把JOIN改成LEFT JOIN,这样即使根节点不存在,子节点的行也会被保留,Root_Title会显示为null。不过从你的示例数据来看,用普通的JOIN(也就是INNER JOIN)就足够啦。
内容的提问来源于stack exchange,提问作者CanadianKamikaze
相关产品推荐
相关产品推荐

