题目
表:SalesPerson
Column Name | Type |
---|---|
sales_id | int |
name | varchar |
salary | int |
commission_rate | int |
hire_date | date |
sales_id 是该表的主键列。 该表的每一行都显示了销售人员的姓名和 ID ,以及他们的工资、佣金率和雇佣日期。
表:Company
Column Name | Type |
---|---|
com_id | int |
name | varchar |
city | varchar |
com_id 是该表的主键列。 该表的每一行都表示公司的名称和 ID ,以及公司所在的城市。
表:Orders
Column Name | Type |
---|---|
order_id | int |
order_date | date |
com_id | int |
sales_id | int |
amount | int |
order_id 是该表的主键列。 com_id 是 Company 表中 com_id 的外键。 sales_id 是来自销售员表 sales_id 的外键。 该表的每一行包含一个订单的信息。这包括公司的 ID 、销售人员的 ID 、订单日期和支付的金额。
编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例:
输入: SalesPerson 表:
sales_id | name | salary | commission_rate | hire_date |
---|---|---|---|---|
1 | John | 100000 | 6 | 4/1/2006 |
2 | Amy | 12000 | 5 | 5/1/2010 |
3 | Mark | 65000 | 12 | 12/25/2008 |
4 | Pam | 25000 | 25 | 1/1/2005 |
5 | Alex | 5000 | 10 | 2/3/2007 |
Company 表:
com_id | name | city |
---|---|---|
1 | RED | Boston |
2 | ORANGE | New York |
3 | YELLOW | Boston |
4 | GREEN | Austin |
Orders 表:
order_id | order_date | com_id | sales_id | amount |
---|---|---|---|---|
1 | 1/1/2014 | 3 | 4 | 10000 |
2 | 2/1/2014 | 4 | 5 | 5000 |
3 | 3/1/2014 | 1 | 1 | 50000 |
4 | 4/1/2014 | 1 | 4 | 25000 |
输出:
name |
---|
Amy |
Mark |
Alex |
解释: 根据表orders中的订单 '3' 和 '4' ,容易看出只有 'John' 和 'Pam' 两个销售员曾经向公司 'RED' 销售过。 所以我们需要输出表salesperson中所有其他人的名字。
题解
sql
SELECT `s`.`name` AS `name`
FROM `SalesPerson` `s`
WHERE NOT EXISTS(SELECT 1
FROM `Orders` `o`
INNER JOIN `Company` `c` ON `o`.`com_id` = `c`.`com_id`
AND `c`.`name` = 'RED' AND `o`.`sales_id` = `s`.`sales_id`
)
1
2
3
4
5
6
7
2
3
4
5
6
7