我在包裝我的頭時遇到了困難,應該是MS SQL中一個非常簡單的查詢。我有兩個表格:Employees
和Departments
。來自同一個數據表的SQL子查詢
Employees
由標準項目:ID (pkey int)
,FName
,LName
,... DepartmentID
。
Departments
由DepartmentID
,DepartmentName
,...,ManagerID
組成。
Employees.DepartmentID
到Departments.DepartmentID
之間有一個關係,Departments.ManagerID
和Employees.EmployeeID
之間有一個關係。
換句話說,每個員工都有一個部門,每個部門都有一個也是員工的經理。
我正在嘗試創建一個顯示員工姓名,部門和部門經理的視圖。
我不斷收到一個錯誤,使用此代碼時,多個值被返回:
SELECT
Employees_1.EmployeeID, Employees_1.FirstName, Employees_1.LastName,
Departments_1.DepartmentName,
(SELECT
dbo.Employees.LastName
FROM dbo.Employees
INNER JOIN dbo.Departments
ON dbo.Departments.DepartmentManager = dbo.Employees.EmployeeID
) AS ManagerName
FROM dbo.Employees AS Employees_1
INNER JOIN dbo.Departments AS Departments_1
ON Employees_1.Department = Departments_1.DepartmentID
AND Employees_1.EmployeeID = Departments_1.DepartmentManager
如何加入回基於從關係相同的表(不同行)任何想法第二張桌子?
使用Left(外部)連接可確保顯示所有員工,而不管他們是否分配了部門/經理。如果要隱藏未進一步關聯的員工/部門,請使用內部公司。 –
+1的JOIN與子查詢討論鏈接:) – Palpatim
@Ray K謝謝,這讓我有一個好開始。我的代碼中有些東西是極其錯誤的,因爲我收到了錯誤的名字(如果有的話)。 MS SQL的查詢生成器用左外部連接替換您的左連接,並且由於您提到它們可能是不必要的,所以我將列別名留下。 在我的查詢中,我有鍵顯示,並且它們正確地填充,但在我的查詢結果中,部門經理的名稱應該是我通過員工ID獲取員工列表。 (例如,第-1名員工deptmgrID = 2,顯示NULL;第2名員工deptmgrID = 2,顯示員工1的姓名;第3名員工ID = 2,2的姓名) – gwhenning