问题
表: Customer
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| name | varchar |
| referee_id | int |
+-------------+---------+
在 SQL 中,id 是该表的主键列。
该表的每一行表示一个客户的 id、姓名以及推荐他们的客户的 id。
找出那些 没有被 id = 2 的客户 推荐 的客户的姓名。
以 任意顺序 返回结果表。
结果格式如下所示。
输入:
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 |
+------+
解答
# Write your MySQL query statement below
select name from Customer where referee_id != "2" or referee_id is NULL;
解析
- MySQL 使用三值逻辑 —— TRUE, FALSE 和 UNKNOWN。
- 任何与 NULL 值进行的比较都会与第三种值 UNKNOWN 做比较。这个“任何值”包括 NULL 本身!
- MySQL 提供 IS NULL 和 IS NOT NULL 两种操作来对 NULL 特殊判断。 unknown小写,是第三个真值。与作为NULL的一种UNKNOWN(未知)是不同的东西。小写是明确的布尔类型的真值,后者大写的既不是值也不是变量。
unknown = unknown -> true
UNKNOWN = UNKNOWN ->unknown
# 逻辑运算
NOT unknown => unknown
true OR unknown => true
unknown OR unknown => unknown
false OR unknown => unknown
# 优先级:
AND: false > unknown > true
OR: true > unknown > false
标签:name,unknown,08,UNKNOWN,50,2023,NULL,true,id
From: https://blog.51cto.com/u_7682110/7009150