1378. 使用唯一标识码替换员工ID
1378. 使用唯一标识码替换员工 ID
题目
Table: Employees
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | name | varchar | +---------------+---------+
id is the primary key (column with unique values) for this table.
Each row of this table contains the id and the name of an employee in a company.
Table: EmployeeUNI
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | unique_id | int | +---------------+---------+
(id, unique_id) is the primary key (combination of columns with unique values) for this table.
Each row of this table contains the id and the corresponding unique id of an employee in the company.
Write a solution to show the unique ID of each user, If a user does not have a unique ID replace just show null
.
Return the result table in any order.
The result format is in the following example.
Example 1:
Input:
Employees table:
+----+----------+ | id | name | +----+----------+ | 1 | Alice | | 7 | Bob | | 11 | Meir | | 90 | Winston | | 3 | Jonathan | +----+----------+
EmployeeUNI table:
+----+-----------+ | id | unique_id | +----+-----------+ | 3 | 1 | | 11 | 2 | | 90 | 3 | +----+-----------+
Output:
+-----------+----------+ | unique_id | name | +-----------+----------+ | null | Alice | | null | Bob | | 2 | Meir | | 3 | Winston | | 1 | Jonathan | +-----------+----------+
Explanation:
Alice and Bob do not have a unique ID, We will show null instead.
The unique ID of Meir is 2.
The unique ID of Winston is 3.
The unique ID of Jonathan is 1.
题目大意
Employees
表:
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | name | varchar | +---------------+---------+
在 SQL 中,id 是这张表的主键。
这张表的每一行分别代表了某公司其中一位员工的名字和 ID 。
EmployeeUNI
表:
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | unique_id | int | +---------------+---------+
在 SQL 中,(id, unique_id) 是这张表的主键。
这张表的每一行包含了该公司某位员工的 ID 和他的唯一标识码(unique ID)。
展示每位用户的唯一标识码(unique ID ) ;如果某位员工没有唯一标识码,使用 null 填充即可。
你可以以任意 顺序返回结果表。
返回结果的格式如下例所示。
示例 1:
输入:
Employees 表:
+----+----------+ | id | name | +----+----------+ | 1 | Alice | | 7 | Bob | | 11 | Meir | | 90 | Winston | | 3 | Jonathan | +----+----------+
EmployeeUNI 表:
+----+-----------+ | id | unique_id | +----+-----------+ | 3 | 1 | | 11 | 2 | | 90 | 3 | +----+-----------+
输出:
+-----------+----------+ | unique_id | name | +-----------+----------+ | null | Alice | | null | Bob | | 2 | Meir | | 3 | Winston | | 1 | Jonathan | +-----------+----------+
解释:
Alice and Bob 没有唯一标识码, 因此我们使用 null 替代。
Meir 的唯一标识码是 2 。
Winston 的唯一标识码是 3 。
Jonathan 唯一标识码是 1 。
解题思路
返回字段:
使用SELECT
指定要返回的字段:eu.unique_id
用于标识员工的唯一编号。e.name
员工名称。
表来源与连接:
- 数据来源于两个表:
Employees
表和EmployeeUNI
表。 - 使用
LEFT JOIN
将两张表连接,确保Employees
表中的所有记录都会包含在结果中,即使在EmployeeUNI
表中没有对应的unique_id
。 - 连接条件为
e.id = eu.id
,即通过两表的id
字段关联。
- 数据来源于两个表:
复杂度分析
- 时间复杂度:
O(n + m)
,其中n
是Employees
表的记录数,m
是EmployeeUNI
表的记录数。连接操作需要遍历两张表的记录以完成匹配。 - 空间复杂度:
O(n)
,返回结果的空间消耗与Employees
表的记录数成正比,因为LEFT JOIN
确保所有员工记录都在结果中。
代码
SELECT eu.unique_id, e.name
FROM Employees e
LEFT JOIN EmployeeUNI eu
ON e.id = eu.id