跳至主要內容

1378. 使用唯一标识码替换员工ID


1378. 使用唯一标识码替换员工 ID

🟢   🔖  数据库  🔗 力扣open in new window LeetCodeopen in new window

题目

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 。

解题思路

  1. 返回字段
    使用 SELECT 指定要返回的字段:

    • eu.unique_id 用于标识员工的唯一编号。
    • e.name 员工名称。
  2. 表来源与连接

    • 数据来源于两个表:Employees 表和 EmployeeUNI 表。
    • 使用 LEFT JOIN 将两张表连接,确保 Employees 表中的所有记录都会包含在结果中,即使在 EmployeeUNI 表中没有对应的 unique_id
    • 连接条件为 e.id = eu.id,即通过两表的 id 字段关联。

复杂度分析

  • 时间复杂度O(n + m),其中 nEmployees 表的记录数,mEmployeeUNI 表的记录数。连接操作需要遍历两张表的记录以完成匹配。
  • 空间复杂度O(n),返回结果的空间消耗与 Employees 表的记录数成正比,因为 LEFT JOIN 确保所有员工记录都在结果中。

代码

SELECT eu.unique_id, e.name
FROM Employees e
LEFT JOIN EmployeeUNI eu
ON e.id = eu.id