我有一个cat
表,其中包含以下列:
cat_id | name | parent_id
1 cat1 1
2 subcat1 1
3 subcat1-subcat 2
此表有数千个类别,但这是一般结构。
当用户选择顶级类别时,我有一个查询来让其子级像这样:
SELECT * FROM cat WHERE parent = $id
我的问题是我需要知道这些儿童类别是否有自己的孩子。
我可以对结果进行循环并对返回的每个类别进行查询,但我希望有一个解决方案,我只能使用一个查询,也许它需要一个子查询?
感谢您的帮助。
答案 0 :(得分:1)
select *, (select COUNT(*) from cat c2 where c2.parent_id = c1.cat_id)
from cat c1
如果存在子类别,则count列将为非零。
答案 1 :(得分:1)
您可以使用子查询来检查是否存在子节点:
select *
, case
when exists (select * from cat c2 where c2.parent_id = c1.cat_id) then 0
else 1
end as HasSubcategories
from cat c1