我最近开始使用MySQL Workbench开发MySQL。我的表中总共有1000行。当我运行此查询时,我得到1000行:
SELECT Id, Dname, DeptId
FROM DEPARTMENT;
但是,当我添加GROUP BY
子句时,我只得到44行:
SELECT Id, Dname, DeptId
FROM DEPARTMENT
GROUP BY DeptId;
为什么会这样? MySQL Workbench是否在显示行时截断行?
修改
当我提出此查询时,它也会返回44 rows
。
SELECT DISTINCT(DEPTID)
FROM DEPARTMENT;
答案 0 :(得分:0)
你的桌子可能有44个独特的DeptId。
这不是MySQL Workbench中的错误或其他任何内容。这是 GROUP BY 的工作原理。如果您通过Id GROUP BY (并且它是您的PK),您将获得1000行。
GROUP BY子句聚合数据,如您所见:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
SELECT @pv:=Id AS d_id, Dname, DeptId
FROM DEPARTMENT
JOIN
(SELECT @pv:=1) tmp
WHERE DeptId=@pv
在 @pv:=1
中,1是表格中的第一个ID。
告诉我它是否有效。参考:How to do the Recursive SELECT query in MySQL?
答案 1 :(得分:0)
当您使用groupby时,将不会选择重复的DeptId ..您的表可能只包含44个唯一的DeptId,因此它显示44行
答案 2 :(得分:0)
要获得第一级子部门,您应该使用:
select *
from DEPARTMENT
where
DeptId in (select ID from DEPARTMENT where DeptId is null)