【问题标题】:MySQL - Query Output Merging DataMySQL - 查询输出合并数据
【发布时间】:2017-03-14 13:16:07
【问题描述】:

所以我有一个查询,旨在查找并显示所有员工的部门、城市和国家名称,其 JOB_ID 为 SA_MAN 和 SA_REP,如下所示:

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 行。简单地说,我怎样才能在查询中进行输出以停止重复显示相同数据的这种不必要的显示,而只显示一行。如果查询更改并且仍然执行相同的操作,我希望它也能够工作,以便每个包含指定员工的部门只显示一行。

【问题讨论】:

  • 使用别名并相应地正确限定列名是一个非常好的习惯。它使查询更容易阅读 - 与明智地使用 CAPS LOCK 键相同。
  • 尝试使用:SELECT DISTINCT
  • 谢谢 Select Distinct Did the Job,你想把它放在下面以便我可以将其标记为答案吗?

标签: mysql sql database merge output


【解决方案1】:

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

考虑修改您的 job_id 定义。这是您设计中的一个弱点。

【讨论】:

  • 会做,但不是我的设计!它的任务,所以我不能改变实际的数据库。感谢您提供有关如何更好地写出查询的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多