584. 尋找用戶推薦人
表: 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 |
±-----+
題解
找出那些 沒有被 id = 2 的客戶 推薦 的客戶的姓名。
where 就行,但要考慮一點就是沒有推薦人的情況,null是不能用來比較的
方法一 where
select name from Customer where referee_id <> 2 or referee_id is null
方法二 where + ifnull
select name from Customer where ifnull(referee_id,0) <> 2
方法三 exists
逆向思維,把推薦人是2的拿出來,通過not exists來實現
-- 判斷c1 表的數據,不存在c2白哦中
select name from Customer c1 where
not exists(select name from (select * from Customer where referee_id = 2
) c2
where c1.id = c2.id
-- where c1.referee_id = c2.referee_id
)