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
)