2017-05-29 4 views
0

私の現在のプロジェクトでは、施設を割り当てられたユーザーグループがあります。私に必要なのは、それは、それはそれにを割り当てられた施設の説明部門ユーザーグループの名前だのショーです。以下に示すように、私はややこれを達成することができました:カウントに0を含めることは余分のwhere句では機能しません

は、現在の「成功した」結果

Successful query of what I wanted

は、私が今直面しています問題は、私はことを知らせるwhere句を追加したとき削除された施設はNOTが含まれている必要があります。以下は、上記の結果を生成する私のSQL文です:私は削除した設備が備わっていないために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 
GROUP BY ug.usergroupname, dpt.deptname, ug.usergroupdesc 
しかし

上の結果を達成するために

声明は、それが他の全体を生成します結果:

編集声明

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

外側に条件を追加するための基本的なルールは加入:外部表の条件は - > WHERE、内部テーブル上の条件に追加 - > ONに追加: 'LEFT tblfacility Fを登録しよう ON ugf.facilityid = f.facilityid AND f.isdeleted = 0' – dnoeth

+0

**変更された結果**は現在の出力です。それを確認して、希望の結果を追加できますか? – KtX2SkD

+0

@dnoeth私はこれを試みたが、それは私に最初の出力を与える。 –

答えて

3

1つのクエリでそれを行う方法については私の頭の上には何もありませんが、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は、最初のテーブルのすべての行と2番目のテーブルの一致する行を保持します。一致するものがない場合、返される値はNULLです。 f.isdeletedの状態でNULLの値がすべて削除され、LEFT JOININNER JOINになります。

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句に属しないこと:

ソリューションはON句に条件を置くことです。

+0

私はあなたのコードを試しましたが、それは私に "現在の成功した結果"と同じ結果を与えています。事実、レコード番号4は1つの施設しか持たないべきです。 2番目の出力に表示される施設の数は、施設が0個あるグループを含む必要があります。 –

関連する問題