2017-05-29 66 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個設施的組。 –

相關問題