mysql - 从mysql查询获取子节点数

标签 mysql sql aggregate-functions hierarchical-data

我正在使用一个递归表,我正在尝试构建一个查询来获取我的子节点计数,但是当我通过 basic_user_id 限制它时,我的查询无法返回正确的计数。 设计背后的想法是让不同的用户拥有自己的公司层次结构,但是我不能让它们相互冲突,这似乎正在发生。

enter image description here

我的查询

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 应该正确返回 1 的计数

enter image description here

现在,当我将 basic_user_id 更改为 541 时,我希望它返回 0,但它似乎仍返回 1。

enter image description here

如何让 basic_user_id = 541 返回计数 0 和 basic_user_id = 23 返回计数 1?

最佳答案

你能试试这个吗?你可以在这里测试。 http://www.sqlfiddle.com/#!2/73f61/2

我添加了 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;

关于mysql - 从mysql查询获取子节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21544559/

相关文章:

带条件的SQL

MySQL 在多对多关系中包含 0

mysql - 编写查询时出现 SQL 语法错误

php - PHP 中的 PDO 过于复杂?

mysql - 如何在 Windows Server 2012 R2 上远程连接到 MySQL

sql - 在sql中选择每个组的第一行

mysql - 从不兼容的表中插入表

java - 使用 JDBC 从 Oracle 11g 中删除记录

sql - MySQL:选择 N 行,但在一列中只有唯一值

t-sql - 如何在 NVARCHAR 类型列上使用聚合函数获取列中的第一个可用值(不是 MIN)?