2012-12-18 27 views
0

enter image description hereSQL查詢空數據並沒有檢索

表系

Table DEPARTMET

Employee表

enter image description here

目前還沒有任何員工的業務部。所以,我相信查詢將還檢索的行(圖像1):

部門編號= 10,DEPARTMENT_NAME =運營,僱員= 0

爲什麼犯規發生???

SELECT EMPLOYEE.Department_ID, DEPARTMENT.Department_Name, Count(*) AS Employees 
FROM EMPLOYEE right JOIN DEPARTMENT ON DEPARTMENT.Department_ID = EMPLOYEE.Department_ID 
GROUP BY DEPARTMENT.Department_Name,.EMPLOYEE.Department_ID 

回答

1

既然你關心這個查詢的主要數據從DEPARTMENT表來了,你可能要考慮重寫您的查詢是:

SELECT DEPARTMENT.Department_ID, DEPARTMENT.Department_Name, Count(EMPLOYEE.Employee_ID) As Employees 
FROM DEPARTMENT 
LEFT JOIN EMPLOYEE ON EMPLOYEE.Department_ID = DEPARTMENT.Department_ID 
GROUP BY DEPARTMENT.Department_ID, DEPARTMENT.Department_Name 
+0

我試過了,但結果是Department_ID = null,Department_Name = Operations,Employee = 1(不能發生) – apkos99

+0

正確 - 這將是這種情況下的結果。我重寫了您的查詢,瞭解我相信您在尋找的內容。 – nybbler

+0

工作很好..謝謝 – apkos99

1

默認joininner join,只返回其中至少有一個排的兩側發現行。將join替換爲left join以檢索沒有員工的部門。

示例代碼:

SELECT e.Department_ID 
,  d.Department_Name 
,  count(e.Employee_ID) AS Employees 
FROM Department d 
LEFT JOIN 
     Employee e 
ON  d.Department_ID = e.Department_ID 
GROUP BY 
     d.Department_ID 
,  d.Department_Name 
+0

我替換它,但得到相同的輸出 – apkos99

+0

呃,我看到'department'是右邊的表。嘗試一個「正確的連接」而不是「左連接」? – Andomar

+0

我試過了,但結果是Department_ID = null,Department_Name = Operations,Employee = 1(這不可能發生) – apkos99

1

這應該做的伎倆。您可以放在一個RIGHT JOIN如果先有EMPLOYEE表,但是這是不好的原因是因爲很快你的查詢,系統就會開始以的LEFTRIGHT加入混合,成爲非常難以閱讀,甚至經驗豐富的SQL專家。堅持與LEFT JOIN你保持查詢維護和可以理解。 (在非常罕見的情況下,RIGHT JOIN可以簡化具有複雜優先級的查詢,但我只做了兩次以避免必須在連接組之間添加括號)。

SELECT 
    D.Department_ID, 
    D.Department_Name, 
    Employees = Count(*) 
FROM 
    dbo.DEPARTMENT D 
    LEFT JOIN dbo.EMPLOYEE E 
     ON D.Department_ID = E.Department_ID 
GROUP BY 
    D.Department_ID, 
    D.Department_Name 

此外,我建議您使用別名替代完整表名。當一致地使用別名時,查詢變得更容易掃描和理解。拼出整個表名通常掩蓋查詢的其他部分。