584. Find Customer Referee
https://leetcode.com/problems/find-customer-referee/
选出推荐人id不为2的customer
SELECT name FROM Customer WHERE referee_id != 2 OR referee_id IS NULL;
注意:由于 SQL 的三值逻辑,如果条件只是 WHERE referee_id <> 2,则返回不出 referee_id 为 null 的顾客。此外,如果将条件写成 referee_id = NULL 同样也是错误的,因为判断空值必须使用 IS NULL/IS NOT NULL。
SQL中的三值逻辑,其中的三个值是真(True)、假(False)和未知(Unknown)。当使用referee_id <> 2
时,如果referee_id
为NULL,那么这个条件的结果是未知,而不是真或假。因此,如果只使用<>
操作符,不包括NULL的记录可能被排除在外,因为未知的条件不满足真条件。
另外,判断NULL值的条件应该使用IS NULL
或IS NOT NULL
,而不是=
或<>
。因为在SQL中,NULL
表示未知的值,它与任何其他值(包括NULL本身)的比较都将返回未知。因此,为了检查列是否为NULL,必须使用IS NULL
或IS NOT NULL
。
此处NULL与2进行比较结果是NULL,无法返回true或者false。所以必须增加IS NULL的判断。
第二种解法:子查询
SELECT name FROM customer WHERE id NOT IN (SELECT id FROM customer WHERE referee_id = 2);
第三种解法:
SELECT name FROM customer WHERE IFNULL(referee_id, 0) <> 2;
IFNULL(referee_id, 0)
: 这部分使用IFNULL
函数。如果referee_id
列的值为NULL,它会返回第二个参数的值,否则返回referee_id
的实际值。在这里,如果referee_id
为NULL,就会使用0替代。这样,查询就会考虑到NULL的情况,将NULL值替换为0。
第四种解法:
SELECT name FROM customer WHERE COALESCE(referee_id, 0) <> 2;
分类:
SQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!