2017-03-14 49 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

会做,但它没有我的设计!它的分配,所以我不能改变实际的数据库。感谢有关如何更好地编写查询的提示。 –