2015-05-17 166 views
0

这是我的查询:MySQL查询问题

SELECT count(*) as total, dp.name,dp.id,dp.description, dp.avatar 
    FROM `doctors` d 
    right join departments dp on d.department_id = dp.id 
    group by d.department_id 

我要表:医生和部门。我想提取每个部门的医生总数。这个查询工作正常,它返回了我所有的部门,有医生,但没有没有。不知何故,我想显示所有的部门和总数,代表属于一个部门的医生。我怎样才能做到这一点 ?

这是医生表:enter image description here ,这是部门表enter image description here

+1

看看这个问题,这将解释你有关的不同方法做连接:[链接](http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full-join)。你也可以向我们展示两个表中的数据示例吗? –

回答

0

你可以试试这个:

SELECT 
    (SELECT count(*) FROM doctors d WHERE d.department_id = dp.id) AS total, 
    dp.* 
FROM departments AS dp 

如果你想使用JOIN那就试试这个:

SELECT 
    COUNT(d.department_id) AS total, 
    dp.* 
FROM departments AS dp 
    LEFT JOIN doctors AS d ON dp.id = d.department_id 
GROUP BY dp.id 
0
SELECT (SELECT count(*) FROM doctors AS d WHERE d.id = dp.id) as total, dp.name,dp.id,dp.description, dp.avatar 
FROM departments dp 

有ofcourse这样做多种方式,我会做这样的

我不认为你需要加入你只需要一个所有的医生的数量,你不会做任何事情的其他信息

+0

thx,但是这会使我的总列数只有1或0,但我有更多的医生属于一个部门。检查我的帖子,我更新了,thx –

+0

你的查询是正确的,除了where部分:WHERE d.department_id = dp.id,我可以用连接而不是select来选择吗? –

0

在我的SQL几十年工作,我从来没有使用正确的连接。我总是发现左连接更容易阅读。我也尝试按照从最高到最低级别的顺序返回列,并以总和和计数结束。它读得更好。

试试这个:

SELECT dp.id,dp.name,dp.description, dp.avatar,count(*) as total 
FROM departments dp 
    LEFT JOIN doctors d 
     on d.department_id = dp.id 
GROUP BY dp.id,dp.name,dp.description, dp.avatar 

你必须永远站在你的SELECT子句中的每一个栏目组,除了那些聚集(如求和,计数)或恒定的。