MySQL如果表中存在行,则创建一个和数

MySQL如果表中存在行,则创建一个和数,mysql,Mysql,我有这样一句话: select * from category a inner join category b on a.row=b.relatedRow inner join category c on b.row=c.relatedRow where a.row=? 我想得到如下“级别”的数量: 如果a有行,级别=1,如果b有行,级别=2,如果c有行,级别=3 我该怎么做 示例 row, relatedRow 1,null 2,1 3,2 4,3 5,2 6,5 所以,1

我有这样一句话:

select * from category a 
inner join category b on a.row=b.relatedRow 
inner join category c on b.row=c.relatedRow where a.row=?
我想得到如下“级别”的数量:

如果a有行,级别=1,如果b有行,级别=2,如果c有行,级别=3

我该怎么做

示例

row, relatedRow

1,null

2,1

3,2

4,3

5,2

6,5
所以,1与任何行都不相关,2与1相关,3与2相关,依此类推

如果行=1,则级别1自1存在起就存在

级别2存在,因为2与1相关

3级存在,因为3和5与2相关

4级存在,因为6与5相关,4与3相关


因此,这棵树下降了4级

试着做一些类似的事情:

select 
    sum(case when not b.relatedRow  is null then 1 else 0 end) as level1_total 
    sum(case when not c.relatedRow  is null then 1 else 0 end) as level2_total
from category a 
left join category b on a.row=b.relatedRow 
left join category c on b.row=c.relatedRow where a.row=?

当然,您可以修改
案例
中的条件,以适合您对has行的定义

尝试以下内容:

select 
    sum(case when not b.relatedRow  is null then 1 else 0 end) as level1_total 
    sum(case when not c.relatedRow  is null then 1 else 0 end) as level2_total
from category a 
left join category b on a.row=b.relatedRow 
left join category c on b.row=c.relatedRow where a.row=?
当然,您可以修改
案例中的条件
,以适合您对has行的定义

现在看到问题的编辑,我希望你看到这个模式可以扩展到第四级甚至更高级别。如果添加一个
where
子句来执行任何筛选,请确保只针对
a
添加条件,否则会弄乱外部联接


现在看到问题的编辑,我希望你看到这个模式可以扩展到第四级甚至更高级别。如果您添加了一个
where
子句来执行任何筛选,请确保只针对
a
添加条件,否则会弄乱外部联接。

我不确定“has rows”是什么意思。您的意思是说,如果关联表中存在relatedRow,那么您希望添加一列
level=1,2,3
?您是否可以编辑您的帖子以显示
a、b、c
中的样本行以及给定样本输入行的预期查询输出?优先级是多少?如果b和c都有行,那么级别是2(b)还是3(c)?我的表就像一棵树。有相关行,这些行也可能有相关行。我想知道这棵树倒下的层数。我知道它有3个级别的限制。我需要一个生成的数字,告诉我这个树根据参数的层数。如果A有行,级别1,如果B有行,级别2,如果C有行,级别3。。。我想用这个数字1-3。你在问题中提到了一个“总和”,我认为这是把人甩了。我错了。我会解决这个问题我不确定你说的“有行”是什么意思。您的意思是说,如果关联表中存在relatedRow,那么您希望添加一列
level=1,2,3
?您是否可以编辑您的帖子以显示
a、b、c
中的样本行以及给定样本输入行的预期查询输出?优先级是多少?如果b和c都有行,那么级别是2(b)还是3(c)?我的表就像一棵树。有相关行,这些行也可能有相关行。我想知道这棵树倒下的层数。我知道它有3个级别的限制。我需要一个生成的数字,告诉我这个树根据参数的层数。如果A有行,级别1,如果B有行,级别2,如果C有行,级别3。。。我想用这个数字1-3。你在问题中提到了一个“总和”,我认为这是把人甩了。我错了。我会解决这个问题