力扣607(MySQL)-销售员(简单)

题目:

表: SalesPerson

 表: Company

 表: Orders

编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。

以 任意顺序 返回结果表。

查询结果格式如下所示。

示例:

 

 解释:

根据表 orders 中的订单 '3' 和 '4' ,容易看出只有 'John' 和 'Pam' 两个销售员曾经向公司 'RED' 销售过。
所以我们需要输出表 salesperson 中所有其他人的名字。

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

解题思路:

建表语句:

1 create table if not EXISTS SalesPerson_607 (sales_id int(3),name varchar(12),salary int(6),commission_rate int(6),hire_date date);
2 create table if not EXISTS Company_607 (com_id int(3),name varchar(12),city varchar(12));
3 create table if not EXISTS Orders_607 (order_id int(3),order_date date,com_id int(3),sales_id int(3),amount int(6));
4 TRUNCATE table SalesPerson_607;
5 insert into SalesPerson_607 values(1,'John',100000,6,'2006-4-1'),(2,'Amy',12000,5,'2010-5-1'),(3,'Mark',65000,12,'2008-12-25'),(4,'Pan',25000,25,'2005-1-1'),(5,'Alex',5000,10,'2007-2-3');
6 TRUNCATE table Company_607;
7 insert into Company_607 values(1,'RED','Boston'),(2,'ORANGE','New York'),(3,'YELLOW','Boston'),(4,'GREEN','Austin');
8 TRUNCATE table Orders_607;
9 insert into Orders_607 values(1,'2014-1-1',3,4,10000),(2,'2014-2-1',4,5,5000),(3,'2014-3-1',1,1,50000),(4,'2014-4-1',1,4,25000);

这三个表给我看迷糊了,使用join 和 not in解决:

①首先将 Company 和 Orders 筛选出向公司 'RED' 销售过sales_id;

1  select sales_id
2   from Company_607 a
3   join Orders_607 b
4   on a.com_id = b.com_id
5   where a.name = 'RED'

 ②然后在SalesPerson表中排除上一步筛选出来的sales_id即可。

1 select name
2 from SalesPerson_607
3 where sales_id not in (
4   select sales_id
5   from Company_607 a
6   join Orders_607 b
7   on a.com_id = b.com_id
8   where a.name = 'RED'
9 )

 

posted on 2023-04-01 10:42  我不想一直当菜鸟  阅读(36)  评论(0编辑  收藏  举报