微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 选择自引用表上任何其他行未指向的行

我有一个自引用表,我很难找到没有任何其他行指向它的行 – 或者换句话说,将那些不是父项的行提供给任何其他行,这意味着,当然,他们没有孩子.

这是我的样本数据表:

+----+------+--------+
| id | name | cat_id |
+----+------+--------+
|  1 | C1   |        |
|  2 | C2   |        |
|  3 | C3   |      1 |
|  4 | C4   |      2 |
|  5 | C5   |      2 |
|  6 | C6   |      5 |
+----+------+--------+

这里,cat_id是父.这是一个’代表’:

.
├──C1
| └──C3
└──C2
    ├──C4
    └──C5
        └──C6

如图所示,类别可以无限期地具有子类别,并且通过指向cat_id来定义它们.如果它是一个“主要”类别,它只是没有指向任何东西.我可以通过在cat_id中选择NULL来获取所有没有“父”的类别,但是如何选择没有“子”的类别?

我试过了:

SELECT
    c1.id, c1.name, c1.cat_id
FROM
    cat c1
INNER JOIN
    cat c2
ON
    c1.id != c2.cat_id

但这不仅返回重复的行,还包括具有子节点的类别.预期结果在表示中以粗体显示.您可以在this SQLFiddle中运行测试.

我怎么能做到这一点?没有递归是否可以实现?

解决方法:

这可能是您在初始查询中的目标:

select a.*
from cat a left outer join
   cat b on a.id = b.cat_id
where b.cat_id is null

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐