Tác giả: Lê Trung Kiên lớp java 08
Email: lekien.2803.cg@gmail.com
SĐT: 0942096947
Link bài toán: https://leetcode.com/problems/replace-employee-id-with-the-unique-identifier/

1. Mở đầu

Xin chào các bạn, mình viết ra bài viết này để chia sẻ phương pháp giải cũng như tư duy của mình về bài toán này của leetcode. Phương pháp của mình có thể không phải là tối ưu nhất, tuy nhiên mình sẽ phân tích, chia nhỏ bài toán ra thành các module nhỏ hơn để dễ giải quyết cũng như giúp các bạn hiểu được các yêu cầu mà bài toán đưa ra.

2. Đề bài

Cho bảng Employees:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| name          | varchar |
+---------------+---------+
id là khóa chính của bảng.
Mỗi hàng của bảng này chứa id và tên của một nhân viên trong công ty.

Và bảng EmployeeUNI:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| unique_id     | int     |
+---------------+---------+
(id, unique_id) là cặp khóa chính của bảng này.
Mỗi hàng của bảng này chứa id và id duy nhất tương ứng của một nhân viên trong công ty.

Viết một truy vấn SQL để hiển thị ID duy nhất của mỗi người dùng, Nếu người dùng không có ID duy nhất, thì chỉ hiển thị null.
Trả về bảng kết quả theo thứ tự bất kỳ.
Định dạng kết quả truy vấn nằm trong ví dụ sau.

Ví dụ 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.

3. Phân tích

Ô kê, bài này họ yêu cầu chúng ta trả về một bảng có hai cột, cột đầu là unique_id và cột thứ hai là name. Với cột unique_id thì ta lấy dữ liệu từ bảng EmployeeUNI còn name thì ta lấy từ bảng Employees.
Nhìn vào đề bài, họ yêu cầu lấy ra unique_id, nhưng nếu không có dữ liệu thì hiển thị null. Vậy thì để lấy dữ liệu từ hai bảng khác nhau như thế này, ta sẽ sử dụng OUT JOIN để lấy dữ liệu ta cần, và cụ thể ở đây là LEFT JOIN.

Chúng ta sẽ lấy toàn bộ dữ liệu ở bảng Employees và ở bảng unique_id, với LEFT JOIN sẽ trả về toàn bộ kết quả ở bảng bên trái, bảng bên phải nếu không có bản ghi tương ứng sẽ trả về null.

4. Code luôn cho nóng

Code của chúng ta sẽ như sau:

select eu.unique_id, e.name
from Employees e
left join EmployeeUNI eu 
on e.id = eu.id

5. Kết thúc

Qua bài viết này, mình đã chia sẻ cho các bạn cách mình tư duy khi giải bài tập trên leetcode. Hi vọng bài viết giúp ích cho các bạn trong cách tư duy để giải các bài tập khác. Xin cám ơn các bạn đã dành thời gian đọc và theo dõi. Peace!!!