2017-05-29 67 views
0

在我当前的项目中,我拥有分配给它们的设施的用户组。我需要的是展现用户组的名称,这是部门,这是描述数量的分配给它的设施。我有些已经能够做到这一点,如下图所示:在计数中包含0不适用于额外的where子句

当前“成功”的结果

Successful query of what I wanted

,我现在面临的问题是,当我添加一个where子句指出已被删除的设施应包括不包括。下面是产生上述结果我的SQL语句:

语句来实现上述

SELECT ug.usergroupname UserGroupName, dpt.deptname Department, ug.usergroupdesc UserGroupDesc, count(ugf.usergroupid) NumOFFacilities 
FROM tblusergroup ug 
LEFT JOIN tblusergroupfacilities ugf 
ON ug.usergroupid = ugf.usergroupid 
LEFT JOIN tbldepartment dpt 
ON dpt.deptcode = ug.deptcode 
LEFT JOIN tblfacility f 
ON ugf.facilityid = f.facilityid 
WHERE ug.isdeleted = 0 
GROUP BY ug.usergroupname, dpt.deptname, ug.usergroupdesc 

然而结果是,当我添加的where子句不包含已删除的设施,它产生一个整体的其他结果:

编辑声明

SELECT ug.usergroupname UserGroupName, dpt.deptname Department, ug.usergroupdesc UserGroupDesc, count(ugf.usergroupid) NumOFFacilities 
FROM tblusergroup ug 
LEFT JOIN tblusergroupfacilities ugf 
ON ug.usergroupid = ugf.usergroupid 
LEFT JOIN tbldepartment dpt 
ON dpt.deptcode = ug.deptcode 
LEFT JOIN tblfacility f 
ON ugf.facilityid = f.facilityid 
WHERE ug.isdeleted = 0 
AND f.isdeleted = 0  //<-------added clause 
GROUP BY ug.usergroupname, dpt.deptname, ug.usergroupdesc 

更改结果

enter image description here

有什么办法都实现扣除上述删除设施的结果?任何帮助真的会被赞赏。

+0

添加条件外一个基本原则联接:关于外部表的条件 - >添加到,条件对内部表 - >添加到ON:'LEFT JOIN tblfacility˚F ON ugf.facilityid = f.facilityid AND f.isdeleted = 0' – dnoeth

+0

**变更结果**是电流输出,正确?你能否确认,并加上所需的结果? – KtX2SkD

+0

@dnoeth我试过了,但它给了我第一个输出。 –

回答

3

没有把我的头就如何做到这一点在一个查询的顶部,但有UNION似乎简单。运行每个单独了解他们提供:

-- Your "changed" query. 

UNION -- or UNION ALL, look up the difference, cuz I forgot it. 

-- Your original query. 
HAVING count(ugf.usergroupid) = 0 
+2

伴侣我不知道这是如何工作..但它的作品。谢谢! –

0

LEFT JOIN保持在第二位的第一个表中的所有行加匹配的行。如果不匹配,则返回的值为NULLf.isdeleted上的条件将删除所有NULL值,将LEFT JOIN转换为INNER JOIN

解决的办法是把条件ON子句中:

SELECT ug.usergroupname UserGroupName, dpt.deptname Department, ug.usergroupdesc UserGroupDesc, count(ugf.usergroupid) NumOFFacilities 
FROM tblusergroup ug LEFT JOIN 
    tblusergroupfacilities ugf 
    ON ug.usergroupid = ugf.usergroupid LEFT JOIN 
    tbldepartment dpt 
    ON dpt.deptcode = ug.deptcode LEFT JOIN 
    tblfacility f 
    ON ugf.facilityid = f.facilityid AND f.isdeleted = 0 
WHERE ug.isdeleted = 0 
GROUP BY ug.usergroupname, dpt.deptname, ug.usergroupdesc; 

注意,在第一个表条件确实属于该WHERE子句。

+0

我试过你的代码,但它给了我与“当前成功结果”相同的结果。事情是,记录号码4应该只有1个设施。第二个输出显示的设施数量是我需要的设施数量,包括其中有0个设施的组。 –

相关问题