2017-10-19 27 views
-1

我寫的SQL語句來顯示DEPARTMENT_ID,JOB_ID和員工的最低工資,但條件之一要求我與名稱「IT」和「SALES排除部門」,這是從另一個表只部門訪問。這樣我使用共享柱DEPARTMENT_ID加入了兩個表,併成功地篩選結果然而根據需要,我無法選擇部門標識顯示沿着JOB_ID和工資。這是我到目前爲止管理:SQL:無法選擇聯接的列

SELECT EMPLOYEES.DEPARTMENT_ID JOB_ID, MIN(SALARY) 
FROM EMPLOYEES JOIN DEPARTMENTS 
ON DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID 
WHERE JOB_ID NOT LIKE '%REP' 
AND DEPARTMENTS.DEPARTMENT_NAME NOT IN ('IT','SALES') 
GROUP BY EMPLOYEES.DEPARTMENT_ID 
HAVING MIN(SALARY) >= 6000 AND MIN(SALARY) <= 18000; 
+0

看起來就像你在選擇列表中的錯字,並作爲一個結果使用JOB_ID作爲EMPLOYEES.DEPARTMENT_ID一個別名(需要有之間的逗號)。 – jmarkmurphy

回答

2

首先,表的別名使查詢更容易編寫和閱讀:

SELECT e.DEPARTMENT_ID, e.JOB_ID, MIN(e.SALARY) 
FROM EMPLOYEES e JOIN 
     DEPARTMENTS d 
     ON d.DEPARTMENT_ID = e.DEPARTMENT_ID 
WHERE e.JOB_ID NOT LIKE '%REP' AND d.DEPARTMENT_NAME NOT IN ('IT',' SALES') 
GROUP BY e.DEPARTMENT_ID, e.JOB_ID 
HAVING MIN(e.SALARY) >= 6000 AND MIN(e.SALARY) <= 18000; 

您需要在GROUP BY所有的非聚集列。

+0

我離開了逗號select語句,因爲這只是它的工作方式,但現在我知道這是因爲我錯過了在小組JOB_ID通過。謝謝。 – Glaz

1

SELECT中的部門ID後面的查詢中缺少逗號,因此它將部門ID的作業ID視爲別名,並在查詢結果中顯示爲作業ID。但你又沒有工作ID在GROUP BY子句,需要通過添加在組或有權使用任何聚合函數

SELECT **EMPLOYEES.DEPARTMENT_ID, JOB_ID,** MIN(SALARY) 
    FROM EMPLOYEES JOIN DEPARTMENTS ON DEPARTMENTS.DEPARTMENT_ID=EMPLOYEES.DEPARTMENT_ID 
    WHERE JOB_ID NOT LIKE '%REP' AND DEPARTMENTS.DEPARTMENT_NAME NOT IN('IT','SALES') 
    GROUP BY EMPLOYEES.DEPARTMENT_ID,JOB_ID 
    HAVING MIN(SALARY) >= 6000 AND MIN(SALARY) <= 18000;