题目:
表: 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 )
标签:607,int,Company,sales,Orders,力扣,MySQL,id From: https://www.cnblogs.com/liu-myu/p/17278214.html