连接两个表中具有不同至 select 个唯一职位的数据

Join data from two tables with distinct to select unique job titles

我有两个 table:员工和办公室。

我想创建一个包含 'employees' 中所有列的视图,但只有 'offices'.

中的两列

此外,我想 select 仅具有独特职称的员工。我正在尝试使用以下代码来完成它,但是 returns 出现以下错误:

#1248 - Every derived table must have its own alias.

我正在使用以下查询:

SELECT employees.*, offices.officeCode, offices.phone 
FROM (
  SELECT DISTINCT employees.jobTitle
) 
JOIN offices ON employees.officeCode = offices.officeCode

办公室 table:

员工table:

想要的结果:

employeeNumber|jobTitle|firstName|officeCode|city|state|country

仅包括示例图像中的前 6 名员工(因为 'Sales Rep' 是重复的 jobTitle,因此不会包括带有它的员工)。

使用此查询:

SELECT e.* 
FROM employees e
WHERE NOT EXISTS (SELECT 1 FROM employees WHERE employeeNumber <> e.employeeNumber AND jobTitle = e.jobTitle)

你得到所有 jobTitle 没有任何其他员工的员工。
所以加入 offices:

SELECT e.employeeNumber, e.jobTitle, e.firstName, o.*
FROM (
  SELECT e.* 
  FROM employees e
  WHERE NOT EXISTS (SELECT 1 FROM employees WHERE employeeNumber <> e.employeeNumber AND jobTitle = e.jobTitle) 
) e INNER JOIN offices o
ON e.officeCode = o.officeCode

当前查询有一些问题:

  • 如错误所示,派生 table 或子查询没有别名。
  • 派生 table 中的 SELECT 查询不完整,没有 FROM 子句:(SELECT distinct emplyees.jobtitle)
  • 从 table 中检索未在查询数据源中引用的列(即 employees

因此,考虑加入两个 tables 以对唯一职位进行计数检查:

SELECT e.*, o.officeCode, o.phone 
FROM employees e
INNER JOIN offices o
   ON e.officeCode = o.officeCode
WHERE e.jobTitle IN
  (SELECT sub.jobTitle
   FROM employees sub
   GROUP BY sub.jobTitle
   HAVING COUNT(*) = 1)

只需使用 window 函数:

SELECT e.*, o.officeCode, o.phone 
FROM (SELECT e.*, COUNT(*) OVER (PARTITION BY jobTitle) as job_cnt
      FROM employees e
     ) e JOIN
     offices o
     ON e.officeCode = o.officeCode
WHERE job_cnt = 1;