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/find-customer-referee/

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 tên Customer.

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| referee_id  | int     |
+-------------+---------+
id là khóa chính của bảng.
Mỗi hàng trong bảng này bao gồm id của khách hàng, tên khách hàng, và id của người giới thiệu khách hàng đó.

Viết câu lệnh truy vấn lấy ra tên của những khách hàng không được giới thiệu bởi người có id = 2.
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: 
Customer table:
+----+------+------------+
| id | name | referee_id |
+----+------+------------+
| 1  | Will | null       |
| 2  | Jane | null       |
| 3  | Alex | 2          |
| 4  | Bill | null       |
| 5  | Zack | 1          |
| 6  | Mark | 2          |
+----+------+------------+
Output: 
+------+
| name |
+------+
| Will |
| Jane |
| Bill |
| Zack |
+------+

3. Phân tích

Đọc yêu cầu thì hơi lú nhưng khi nhìn vào ví dụ các bạn sẽ hiểu, chúng ta cần lấy ra tên của những người mà có referee_id không phải là 2. Nhìn vào ví dụ, chúng ta sẽ thấy Zack thì có referee_id = 1 là hợp lệ; bên cạnh đó kể cả Will, Jane, Bill mặc dù không được ai giới thiệu (referee_idnull) cũng hợp lệ, miễn là referee_id khác 2 là được. Và để lọc ra được kết quả như vậy, chúng ta sẽ dùng mệnh đề WHERE, với cú pháp như sau:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

Với điều kiện là referee_id != 2 hoặc referee_idnull, thì chúng ta sẽ lấy được kết quả như ý.

4. Code luôn cho nóng

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

select name
from customer
where referee_id != 2 or referee_id is null

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!!!