ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

LeetCode力扣-数据库584寻找用户推荐人

2022-06-01 00:05:01  阅读:171  来源: 互联网

标签:customer 584 referee name id 力扣 WHERE LeetCode SELECT


584题干

给定表 customer ,里面保存了所有客户信息和他们的推荐人。

写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。

 

SQL架构

 

复制代码 Create table If Not Exists Customer (id int, name varchar(25), referee_id int) Truncate table Customer insert into Customer (id, name, referee_id) values ('1', 'Will', 'None') insert into Customer (id, name, referee_id) values ('2', 'Jane', 'None') insert into Customer (id, name, referee_id) values ('3', 'Alex', '2') insert into Customer (id, name, referee_id) values ('4', 'Bill', 'None') insert into Customer (id, name, referee_id) values ('5', 'Zack', '1') insert into Customer (id, name, referee_id) values ('6', 'Mark', '2') 复制代码

 

示例

 

我的题解

首先观察该关系表,很容易想到如下语句:

SELECT name
FROM customer 
WHERE referee_id != 2;

但是,以上语句是错误解,因为没有考虑到客户没有推荐人(推荐人为null值的情况)

于是又改进出以下题解:

# Write your MySQL query statement below
SELECT name
FROM customer 
WHERE referee_id = NULL OR referee_id <> 2

以上题解是错误的,原因是表达推荐人不为null的正确语法是

referee_id IS NULL
# Write your MySQL query statement below
SELECT name
FROM customer 
WHERE referee_id IS NULL AND referee_id <> 2

这里的错误是把OR写成了AND,以上是两个很基础的错误写法



1 # Write your MySQL query statement below 2 SELECT name 3 FROM customer WHERE name NOT IN (SELECT name 4 FROM customer 5 WHERE referee_id = 2);

以上是我自己写的题解,貌似没有错误,运行后却不通过

原因是在使用NOT IN时,最好使用主键ID来限定查询范围,使用姓名可能有重名的情况

改进后如下:

# Write your MySQL query statement below
SELECT name
FROM customer WHERE ID NOT IN (SELECT ID
FROM customer
WHERE referee_id = 2);

运行,通过!

 

优秀题解

# Write your MySQL query statement below
SELECT name 
FROM customer 
WHERE referee_id != 2 AND referee_id IS NULL;

 

 


 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-customer-referee/submissions/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

搜索

复制

标签:customer,584,referee,name,id,力扣,WHERE,LeetCode,SELECT
来源: https://www.cnblogs.com/fancy2022/p/16332831.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有