跳至主要內容

584. 寻找用户推荐人


584. 寻找用户推荐人

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

题目

Table: Customer

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| referee_id  | int     |
+-------------+---------+

In SQL, id is the primary key column for this table.

Each row of this table indicates the id of a customer, their name, and the id of the customer who referred them.

Find the names of the customer that are not referred by the customer with id = 2.

Return the result table in any order.

The result format is in the following example.

Example 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 |
+------+

题目大意

表: Customer

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| referee_id  | int     |
+-------------+---------+

在 SQL 中,id 是该表的主键列。

该表的每一行表示一个客户的 id、姓名以及推荐他们的客户的 id。

找出那些 没有被 id = 2 的客户 推荐 的客户的姓名。

任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入:

Customer 表:

+----+------+------------+
| id | name | referee_id |
+----+------+------------+
| 1  | Will | null       |
| 2  | Jane | null       |
| 3  | Alex | 2          |
| 4  | Bill | null       |
| 5  | Zack | 1          |
| 6  | Mark | 2          |
+----+------+------------+

输出:

+------+
| name |
+------+
| Will |
| Jane |
| Bill |
| Zack |
+------+

解题思路

  1. 返回字段
    使用 SELECT 指定要返回的字段为 name(客户姓名)。从 Customer 表中提取数据。

  2. 筛选条件

    • 使用 WHERE 子句指定筛选条件。
    • 包含两种情况:
      1. referee_idNULL,使用 IS NULL 判断空值。
      2. referee_id 不等于 2,使用 != 2 判断。
    • 使用 OR 运算符将上述条件结合,确保筛选出的客户符合任意一个条件。

复杂度分析

  • 时间复杂度O(n),其中 nCustomer 表的记录数。SQL 引擎会逐行检查 referee_id 是否满足条件。
  • 空间复杂度O(1),无需额外空间,筛选操作在原表上完成。

代码

SELECT name
FROM Customer
WHERE referee_id IS NULL OR referee_id != 2