Problem

Table: Customer

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

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.

Write an SQL query to report the names of the customer that are not referred by the customer with id = 2.

Return the result table in any order.

Return the result table in any order.

Examples

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

Solution

Method 1 - Simple Where

Code

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

Method 2 - Using IFNULL OR Coelesce in Where

Code

SQL
SELECT name FROM customer WHERE IFNULL(referee_id,0) <> 2;

We can also use coalesce, which is more standard (as ifnull is MySQL specific.)

SELECT name FROM customer 
WHERE coalesce(referee_id, 0) <> 2