首页 > 解决方案 > 连接两个具有不同表的数据以选择唯一的职位

问题描述

我有两张桌子:员工和办公室。

我想创建一个包含“员工”的所有列的视图,但只有两列“办公室”。

另外,我只想选择具有独特职称的员工。我正在尝试使用以下代码执行此操作,但它返回以下错误:

#1248 - 每个派生表都必须有自己的别名。

我正在使用以下查询:

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

办公室表:

办公室表

员工表:

员工表

期望的结果:

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

仅包括示例图像中的前 6 名员工(因为“销售代表”是重复的职位名称,因此不包括具有它的员工)。

标签: mysqlsqljoinderived-table

解决方案


当前查询存在许多问题:

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

因此,请考虑通过对唯一职位名称的计数检查来连接这两个表:

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)

推荐阅读