连接两个表中具有不同至 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;
我有两个 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;