我正在使用递归表,我正在尝试构建一个查询以获取我的子节点计数但是当我通过basic_user_id
限制它时,我的查询无法返回正确的计数。
设计背后的想法是让不同的用户拥有自己的公司层次结构,但是我不能让他们彼此冲突,这似乎正在发生。
我的查询
select * , count(c2.company_id )
from company_user c1 left join company_user c2 on c2.parent_id = c1.company_id
where c1.company_id in (1337)
and c1.basic_user_id = 23
group by c1.company_id;
basic_user_id = 23
应该返回正确执行的计数
现在当我将basic_user_id
更改为541时,我希望它返回0,但它似乎仍然会返回1的计数。
如何让basic_user_id = 541
返回0和basic_user_id = 23
以返回1?
答案 0 :(得分:1)
已解决,我只需要添加第二个连接。
select * , count(c2.company_id )
from deepblue.company_user c1 left join deepblue.company_user c2 on c2.parent_id = c1.company_id
and c1.basic_user_id = c2.basic_user_id
where c1.company_id in (1337)
and c1.basic_user_id= 541
group by c1.company_id;
答案 1 :(得分:1)
我添加了AND child_tab.basic_user_id = parent_tab.basic_user_id
ON子句。因为你正在做LEFT JOIN
SELECT parent_tab.company_id, COUNT(child_tab.company_id)
FROM company_user parent_tab LEFT JOIN company_user child_tab
ON child_tab.parent_id = parent_tab.company_id
AND child_tab.basic_user_id = parent_tab.basic_user_id
WHERE parent_tab.company_id IN (1337)
AND parent_tab.basic_user_id = 23
GROUP BY parent_tab.company_id;
答案 2 :(得分:0)
更改
count(c2.company_id )
到
sum(case when c2.company_id is null then 0 else 1 end)
(请检查数据库的case语句的语法)