2017-03-14 48 views
0

所以,我必須旨在發現和顯示部,城市和國名與SA_MAN和SA_REP的JOB_IDs所有員工這是​​一個查詢,如下所示:MySQL的 - 查詢輸出合併數據

SELECT DEPARTMENT_NAME, CITY, COUNTRY_NAME 
FROM OEHR_EMPLOYEES 
INNER JOIN OEHR_DEPARTMENTS ON OEHR_EMPLOYEES.DEPARTMENT_ID=OEHR_DEPARTMENTS.DEPARTMENT_ID 
INNER JOIN OEHR_LOCATIONS ON OEHR_DEPARTMENTS.LOCATION_ID=OEHR_LOCATIONS.LOCATION_ID 
INNER JOIN OEHR_COUNTRIES ON OEHR_LOCATIONS.COUNTRY_ID=OEHR_COUNTRIES.COUNTRY_ID 
WHERE JOB_ID LIKE '%SA_MAN%' OR JOB_ID LIKE '%SA_REP%' 
ORDER BY DEPARTMENT_NAME DESC 
/

但是,所有的員工駐留在一個部門中,因此對於SA_MAN或SA_REP的JOB_ID列中的每個員工而言,輸出結果都是一樣的。如圖所示:

DEPARTMENT_NAME    COUNTRY_NAME        CITY 
------------------------------ ---------------------------------------- ---------------------------- 
Sales       United Kingdom       Oxford 
Sales       United Kingdom       Oxford 
Sales       United Kingdom       Oxford 

這繼續34行。簡單地說,我怎樣才能使查詢中的輸出反覆停止這種不必要的相同數據的顯示,並只顯示一行。如果查詢發生變化,並且仍然執行相同的操作,以便每個包含指定員工的部門只顯示一行,我希望此功能也能夠工作。

+0

這是一個非常好的習慣,可以使用別名並相應地限定列名。它使查詢更容易閱讀 - 與明智使用CAPS LOCK鍵相同。 – Strawberry

+1

嘗試使用:** SELECT DISTINCT ** –

+0

並參見http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me- to-be-a-very-simple-sql-query – Strawberry

回答

0

FWIW,我覺得這更容易閱讀:

SELECT d.department_name 
    , l.city 
    , c.country_name 
    FROM oehr_employees e 
    JOIN oehr_departments d 
    ON d.department_id = e.department_id 
    JOIN oehr_locations l 
    ON l.location_id = d.location_id 
    JOIN oehr_countries c 
    ON c.country_id = l.country_id 
WHERE job_id LIKE '%sa_man%' 
    OR job_id LIKE '%sa_rep%' 
ORDER 
    BY department_name DESC 

考慮修改您的作業ID定義。這是你設計中的一個弱點。

+0

會做,但它沒有我的設計!它的分配,所以我不能改變實際的數據庫。感謝有關如何更好地編寫查詢的提示。 –